我寫了一個宏,它基本上總結了數字,根據我們的投影模型按年和月分組。它在單步執行代碼時運行良好(從頭到尾F8
),但在標準執行時立即停止(“播放”按鈕F5
)。根據 VBA,第一個麻煩在于以下行:
issmIndex = Range("A1:Z1").Find("ck.IssMon").Column 'issmIndex an integer
...拋出一個Runtime error 91
.
最初我嘗試過Application.WorksheetFunction.Match(...)
但遇到了同樣的問題:在除錯中運行正常,但在執行中運行(Error 1004
而不是)。我認為這可能是 Excel 版本的問題(該Match
函式在意大利語版本中有不同的名稱)所以我決定切換到更中性的Find
,但仍然沒有運氣。
請問有人有什么想法嗎?如果有錯誤,除錯怎么可能不顯示錯誤?謝謝!
uj5u.com熱心網友回復:
當您遇到由多個命令組合而成的行出現錯誤時,請嘗試將其分解為各個步驟。
例如,這有效:
Sub findDemo()
Const toFind = "blah"
Dim rg As Range, f As Range
Set rg = Range("A2:C5")
Set f = rg.Find(toFind)
If f Is Nothing Then
Stop 'not found
Else
Debug.Print "found in column #" & f.Column
End If
End Sub
另請參閱檔案中的示例Range.Find()
。
uj5u.com熱心網友回復:
歡迎來到 SO。有時 Excel讀取代碼的速度比執行速度快,因此在讀取命令時,前一個命令尚未完成。這很奇怪,但如果你的代碼做了很多事情和微積分,它就會發生很多。
此外,在除錯時,每條命令列都會在讀取下一條之前執行,因此您無法僅在除錯時檢測到這一點。
因此,如果您的代碼在除錯時運行完美,但在正常執行時出現錯誤,請嘗試DoEvents
在有問題的行之前添加命令。像這樣的東西:
' your previous code
'
'
'
Doevents
issmIndex = Range("A1:Z1").Find("ck.IssMon").Column 'issmIndex an integer
'
'rest of your code
此命令強制Excel 在讀取之前確保所有內容都已執行。這有點像一個檢查點,比如在進入下一行之前確保你已經完成了所有作業。
DoEvents 函式
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/491895.html