VBA:当工作簿/工作表中发生最后一个错误时,如何通过 VBA 代码获取最后使用的单元格?

标签 vba scripting excel

最终,我想将单元格移动到上次发生错误的位置。 编辑:忘记说我正在使用 Excel 2003。

最佳答案

根据评论中的要求...

在 Excel VBA 帮助中查找“Application”对象的“Caller”属性。当您从 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:当工作簿/工作表中发生最后一个错误时,如何通过 VBA 代码获取最后使用的单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3861431/

相关文章:

EXCEL:需要在另一个工作表的一系列单元格中查找值并从相邻单元格返回值

excel - VBA 函数 - 如何将函数参数类型设置为条件?

ms-access - 使用变量来命名我正在制作的表

excel - 列表框中选定的行复制到另一个列表框

excel - 如何使用 VBA 获取前五篇新闻文章的名称和链接

vba - Excel 找不到日期(无论格式选项如何)

excel - 循环不更新 range.row 或 range.column

scripting - @ 在 p4 文件名中

linux - unix 脚本来 grep 选择日期范围?

javascript - Android、Javascript、Rhino、JSON