Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 使用VB编写Excel(多行)_Vb.net_Excel_Vba - Fatal编程技术网

Vb.net 使用VB编写Excel(多行)

Vb.net 使用VB编写Excel(多行),vb.net,excel,vba,Vb.net,Excel,Vba,我的代码通过SQL中的查询成功创建了Excel文件,尽管创建该文件需要花费太多的时间。如何最大限度地减少创建时间? 代码如下: rsAnaforaPr.DoQuery("SELECT * FROM [dbo].[zam_excel]") rsAnaforaPr.MoveFirst() hj = False rowCount = 1 While rsAnaforaPr.EoF = False shell1 = rsAnaforaPr.Fields.Item("Va

我的代码通过SQL中的查询成功创建了Excel文件,尽管创建该文件需要花费太多的时间。如何最大限度地减少创建时间?
代码如下:

rsAnaforaPr.DoQuery("SELECT * FROM [dbo].[zam_excel]")
rsAnaforaPr.MoveFirst()
   hj = False
   rowCount = 1
   While rsAnaforaPr.EoF = False
        shell1 = rsAnaforaPr.Fields.Item("Value1").Value
        If hj = False Then
            oExcel = CreateObject("Excel.Application")
            oExcel.DisplayAlerts = False
            oBook = oExcel.Workbooks.Add
            hj = True
            oBook.SaveAs("C:\Desktop\New folder\excel.xlsx")
            oBook.Close(True)
            oExcel.Quit()
            oExcel = CreateObject("Excel.Application")
            oExcel.DisplayAlerts = False
            oBook = oExcel.Workbooks.Open("C:\Desktop\New folder\excel.xlsx")        
            oSheet = oBook.Worksheets("Sheet1")
            oSheet.Range("A" & rowCount).Value = "Value1"
            rowCount = rowCount + 1
            oSheet.Range("A" & rowCount).NumberFormat = "@"
            oSheet.Range("A" & rowCount).Value = shell1 
       Else
            oSheet.Range("A" & rowCount).NumberFormat = "@"
            oSheet.Range("A" & rowCount).Value = shell1                     
        End If
        rowCount = rowCount + 1
        rsAnaforaPr.MoveNext()
    End While
    oBook.Close(True)
    oExcel.Quit()

在开头写下以下内容:

Application.screenUpdate=False

然后在代码结束时编写:

Application.ScreenUpdate=True

速度提升将显而易见。
阅读更多关于
屏幕更新
属性的信息-

我使用与下面类似的代码。
但是,说到这里,我刚刚注意到了您的
VB.NET
标记。。。出于某种原因,将其作为访问权限阅读。
我想这对那个没用?有人告诉我&我会删除答案

Sub Test()
    Dim oXL As Object
    Dim oWrkBk As Object
    Dim DB As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim prm As DAO.Parameter
    Dim rst As DAO.Recordset

    '''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Defer error trapping in case Excel is not running. '
    '''''''''''''''''''''''''''''''''''''''''''''''''''''
    On Error Resume Next
    Set oXL = GetObject(, "Excel.Application")

    '''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'If an error occurs then create an instance of Excel. '
    'Reinstate error handling.                            '
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''
    If Err.Number <> 0 Then
        On Error GoTo -1
        On Error GoTo ERR_HANDLE
        Set oXL = CreateObject("Excel.Application")
    End If

    Set oWrkBk = oXL.workbooks.Add

    oXL.Visible = True

    Set DB = CurrentDb
    Set qdf = DB.CreateQueryDef("", "SELECT * FROM [dbo].[zam_excel]")
    For Each prm In qdf.Parameters
        prm.Value = Eval(prm.Name)
    Next prm
    Set rst = qdf.OpenRecordset

    If Not (rst.BOF And rst.EOF) Then
        oWrkBk.worksheets(1).range("A1").CopyFromRecordSet rst
    End If

EXIT_PROC:

        On Error GoTo 0
        Exit Sub

ERR_HANDLE:
        Select Case Err.Number

            Case Else
                MsgBox Err.Description & "( " & Err.Number & ")", vbOKOnly
                Resume EXIT_PROC
        End Select

End Sub
子测试()
作为对象的Dim-oXL
作为对象的Dim oWrkBk
Dim数据库作为DAO.Database
将qdf设置为DAO.QueryDef
作为DAO.Parameter的Dim prm
将rst设置为DAO.Recordset
'''''''''''''''''''''''''''''''''''''''''''''''''''''
'如果Excel未运行,则延迟错误捕获。'
'''''''''''''''''''''''''''''''''''''''''''''''''''''
出错时继续下一步
Set oXL=GetObject(,“Excel.Application”)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
'如果发生错误,则创建Excel实例。'
“恢复错误处理。”
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
如果错误号为0,则
关于错误GoTo-1
On Error GoTo ERR_句柄
Set oXL=CreateObject(“Excel.Application”)
如果结束
设置oWrkBk=oXL.workbooks.Add
oXL.Visible=True
Set DB=CurrentDb
设置qdf=DB.CreateQueryDef(“,”从[dbo].[zam_excel]]中选择*)
对于qdf.参数中的每个prm
prm.Value=Eval(prm.Name)
下一个prm
Set rst=qdf.OpenRecordset
如果不是(rst.BOF和rst.EOF),则
oWrkBk.工作表(1).范围(“A1”).复制自记录集rst
如果结束
退出程序:
错误转到0
出口接头
错误句柄:
选择案例错误编号
其他情况
MsgBox错误说明(“&Err.Number&”),vbOKOnly
恢复退出程序
结束选择
端接头

如果在while循环中构建一个2D数组,并将数组写入电子表格,则填充速度会更快。只需将数组写入所需数据的左上角单元格,它将一次写入所有内容,而不是逐个单元格首先在循环中读取记录集中的所有内容。记录数组中的元素。然后将其全部写入Excel中的单个区域。这个问题更适合IMO。请记住,您可以使用
GetRows
方法(DAO
ADO
libs都支持)获取整个记录集的数组,然后用该数组填充一个单元格区域,即代表左上角。您好,Vityta,写这篇文章时,我收到了错误对象变量或未设置块变量