0
剛開始使用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:這是一個業餘愛好者的代碼,我只是在尋找一些能夠正常工作的東西。
也許GetValue減慢它的循環迭代並不是很多。你有沒有嘗試沒有GetValue看它執行多快? – jivko
我不明白這一點:ExecuteExcel4Macro(arg)'arg沒有被定義在任何地方,然後你不使用你傳遞給函數的變量。當你運行它時,你會得到除「=」以外的結果嗎? –
它看起來像您的「GetValue」函數打開工作簿並提取一個值然後關閉它。這是一個昂貴的過程。更不用說你正在通過網絡連接進行此操作。更昂貴。現在它處於一個循環中。難怪它太慢了。如果這不是一個例行程序,您可以將文件複製到本地機器上。另外,如果可能,在源文件仍處於打開狀態時,您可能會將多個值複製到目標文件。 – twegner