【发布时间】:2017-05-26 16:33:33
【问题描述】:
一直以来,我一直在使用以下方法在用户在前台拥有的任何活动工作表上执行宏。
Public Sub MySub()
Dim ws as Worksheet
Set ws = ActiveSheet
'Execute some code
Debug.Print ws.Name
End Sub
直到昨天,这已按预期执行,ActiveSheet 始终返回当前位于前台或具有焦点的ActiveSheet,通过视图->宏->运行对话框执行宏。不管代码是从哪个Workbook 执行的。
由于某种原因,最近我遇到了一个问题,即 ActiveSheet 返回执行代码的 Workbook 中的最后一个 ActiveSheet,无论我是否打开了另一本书并且它有焦点。
我运行了几次并重现了这种意外行为。在我对自己没有失去理智感到满意后,我将Set ws = ActiveSheet 换成了Set ws = Application.ActiveSheet,它的行为与预期一样。返回在前台运行的工作表。
提问时间:
我做错了吗?
有其他人经历过这种情况或能够重现这种情况吗?
这是新的吗,我是否需要返回所有旧宏并将
ActiveSheet更改为Application.ActiveSheet?
【问题讨论】:
-
你需要说
activeworkbook.activesheet -
ActiveSheet等价于Application.ActiveSheet除非您在代码模块ThisWorkbook中运行一些代码,这意味着ThisWorkbook.ActiveSheet。您是否正在运行位于ThisWorkbook的宏? -
你是对的。
ActiveWorkbook.ActiveSheet和Application.ActiveSheet本质上是同义词。但是为什么ActiveSheet,(本身)是Application对象的一部分,需要ActiveWorkbook.或Application.前缀?我已经让它多次正确运行,没有前缀。 -
@A.S.H.是的,代码在
ThisWorkBook,这就解释了!谢谢。现在我可以恢复我的理智,或者它剩下的东西。呵呵。