VBA for循环耗时太长

时间:2017-06-06 03:49:19

标签: excel vba excel-vba

刚开始使用VBA,我的代码非常缓慢。我在网络驱动器上有许多工作簿,每个工作簿都有几个工作表。我正在尝试使用以下代码从每个工作表中的许多非连续范围中获取数据到预先设计的工作表:

Private Function GetValue(path, file, sheet, ref)
    'retrieve value
    '// code
    GetValue = ExecuteExcel4Macro(arg)
End Function

Sub UpdateModel1()

    sheet = "blah blah"
    Application.ScreenUpdating = False

    'Outputs
    destRow = 31            'destination row
    destCol = 6             'destination column
    srcRow = 50             'source row

    For C = 23 To 31        'loop through source columns
        ref = Cells(srcRow, C).Address
        Cells(destRow, destCol) = GetValue(path, file, sheet, ref)
        destCol = destCol + 1
    Next C

    Application.ScreenUpdating = True

End Sub

但是,在子过程中使用嵌套的for循环需要太长时间。有关如何改进此代码的任何建议? PS:这是一个业余爱好者的代码,我只是在寻找能够很好地完成工作的东西。

1 个答案:

答案 0 :(得分:0)

以下是您尝试执行的操作示例:

Sub TestGetSheetValue()
    MsgBox GetSheetValue("N:\Tax Documents\", "Tax Stuff.xlsx", "Sheet1", "R1C3")
End Sub


Function GetSheetValue(strPath As String, strFile As String, strSheet As String, strCellRef As String)
    GetSheetValue = ExecuteExcel4Macro("'" & strPath & "[" & strFile & "]" & strSheet & "'!" & strCellRef)
End Function

显然,根据需要更改传入函数的内容,请注意地址为R1C1格式。

strSheet是工作表名称,而不是工作表索引。

确保路径上有\尾随

最后,尽量不要使用文件,路径和表格等名称作为变量名称。