刚开始使用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:这是一个业余爱好者的代码,我只是在寻找能够很好地完成工作的东西。
答案 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是工作表名称,而不是工作表索引。
确保路径上有\
尾随
最后,尽量不要使用文件,路径和表格等名称作为变量名称。