【问题标题】:Perform action upon workbook being reactivated在重新激活工作簿时执行操作
【发布时间】:2018-12-19 14:35:29
【问题描述】:

我有一个工作簿,其中包含通过 VBA 打开其他工作簿的按钮。

我的理解是这个初始工作簿(我们称之为 Hub 工作簿),当我在其中时,它既是 ThisWorkbook 又是 ActiveWorkbook。

通过其中一个按钮打开另一个工作簿时,新打开的工作簿变为 ActiveWorkbook。

当我再次点击 Hub 时,它再次变为 ActiveWorkbook。

我想执行一个操作,只有当 Hub 恢复为活动工作簿的状态时。

我尝试通过在工作表上执行操作来执行此操作,但如果它是唯一的工作表并且我只是从另一个工作簿中单击它,则不会执行此操作。例如,如果我有两个工作表并单击返回此工作表,则可以。

Private Sub Worksheet_Activate()
 MsgBox "Worksheet Reactivated"
End Sub

我似乎无法让它按我的要求工作,但我确信一定有某种方法可以做到这一点。

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 您是否正在寻找Workbook Activate 活动?
  • 我已经看到了,但我认为这不是我需要的。那就是告诉工作簿变得活跃。我想要的是在达到活动状态后做一些事情。用户在此工作簿中主动单击即可达到此状态。
  • @Satkin2 不是这样,它是一个事件,只要工作簿变为活动状态就会发生。
  • Workbook.Activate 与提到的事件之间存在差异。 事件“在激活工作簿、工作表、图表工作表或嵌入图表时发生。”
  • 我明白我误解了它。使用下面的答案对其进行了排序。谢谢。

标签: excel vba excel-2013


【解决方案1】:

Worksheet 模块,例如Sheet1,是一种特殊类型的类模块,它继承了Worksheet 类的成员,让您可以轻松处理为Worksheet 对象定义的事件。在运行时,Sheet1 模块代表Worksheet 类的一个非常具体的instance - 因此,您在该模块中实现的任何事件处理程序,只会为从 触发的事件调用那个对象。

因此,Sheet1 的代码隐藏中的 Worksheet_Activate 处理程序只会在 Sheet1 对象触发其 Activate 事件时运行。

如果您不关心任何特定或特定的工作表,那么您需要处理不同级别的事件:ThisWorkbook 模块是一种特殊类型的类模块,它继承了 Workbook 类的成员,并让您轻松处理为Workbook 对象定义的事件。此工作簿对象始终代表承载您所在的 VBA 项目的特定工作簿,而不代表其他工作簿。

每当任何工作表(无论是WorksheetChart 工作表或任何其他类型的工作表)被激活时,Workbook 对象都会触发 SheetActivate 事件 - 你会得到通过对应handler的Sh参数激活的sheet。

Workbook 对象在变为ActiveWorkbook 时也会触发其自己的Activate 事件。

您似乎想要处理 Workbook 事件。试验一下您可以在 ThisWorkbook 模块中获得的处理程序,看看哪种处理程序最符合您的要求。

ThisWorkbook中代码窗格左上角的组合框中选择Workbook,然后从右侧组合框中选择一个事件,以使VBE自动生成具有正确的事件处理程序原型签名:

如果您需要处理Application 范围内的事件,事情会涉及更多,但关键是您需要有一个声明WithEvents 的类模块(可能是ThisWorkbook)变量:

Private WithEvents App As Excel.Application

And now the top-left dropdown will list App, and when that's selected the top-right dropdown will let you pick an Excel.Application event to handle... provided that you Set this App object变量为有效的Excel.Application 引用,例如,在Workbook_Open 处理程序中:

Private Sub Workbook_Open()
    Set App = Me.Application
End Sub

例如,现在您可以处理在任何工作簿被激活时触发的事件。

【讨论】:

  • 完美,我不知道这一点。谢谢。
猜你喜欢
  • 2019-03-03
  • 2016-07-28
  • 2014-07-02
  • 1970-01-01
  • 2017-01-16
  • 2019-11-19
  • 1970-01-01
  • 2014-09-24
  • 2015-03-15
相关资源
最近更新 更多