簡體   English   中英

VBA:如何在工作簿/工作表中發生最后一個錯誤時通過VBA代碼獲取最后一個使用過的單元格?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM