[英]VBA: How to get the last used cell by VBA code when the last error occured in a Workbook/Worksheet?
最后,我想將單元格移動到發生最后一次錯誤的位置。 編輯:忘了說我正在使用Excel 2003。
根據評論中的要求......
在Excel VBA幫助中查找“應用程序”對象的“調用者”屬性。 當您從VBA例程中使用它時,它將告訴您對例程的調用來自何處 - 范圍,圖表等。
使用'Application.Caller'時要注意的一件重要事情是它並不總是Range對象。 查看幫助,但該屬性返回Variant值,該值可以是Range,String或Error。 (在您感興趣的情況下,它是一個Range對象,但您需要注意這一點。)
由於上述情況,以及VBA語法在對象與值之間的變幻莫測,使用'Application.Caller'可能會很棘手。 畫一條線:
Debug.Print Application.Caller.Address
當調用者不是Range時,代碼中的代碼將失敗。 做類似的事情:
Dim v
v = Application.Caller
將“編譯”,但會在調用者是一個Range時創建循環引用,因為您試圖訪問調用Range的值。
這意味着最好為自己編寫一個小實用函數:
Public Function currentCaller() As String
If TypeOf Application.Caller Is Range Then
Dim rng As Range
Set rng = Application.Caller
currentCaller = rng.Address(External:=True)
Else
currentCaller = CStr(Application.Caller)
End If
End Function
然后從錯誤處理程序中調用它,您想知道調用的來源。
還有一件事 - 顯然,只有在實際調用VBA例程后,這才能告訴您調用者。 如果調用公式中有錯誤,Excel將向您的單元格返回錯誤值,而不會調用您的VBA例程。
將VBA函數包裝在另一個函數中,該函數將單元格位置和值存儲為變體。 保持這個“包裝”功能盡可能基本,這樣就不會產生任何其他錯誤。
如果您正在嘗試調試應用程序崩潰錯誤,則包裝函數甚至可以將這些值存儲在逗號分隔的文本文件中。 存儲后,Excel可能會崩潰所需的全部內容,您仍然可以知道單元格位置和值是什么,因為您事先將它們存儲在Excel之外。
這可以用錯誤處理程序完成嗎?
我的意思如下:
sub code1()
on error goto cell A1
end sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.