在重新激活工作簿时执行操作

Perform action upon workbook being reactivated

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

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

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

当我再次点击 Hub 时,它又变成了 ActiveWorkbook。

我想执行一个操作,只有当 Hub 重新获得活动工作簿的状态时。

我已经尝试通过对工作执行操作来执行此操作sheet,但是如果它是唯一的 sheet 并且我只是从另一个工作簿中单击返回它就不会执行此操作。例如,如果我有两个作品sheet然后单击返回到这个作品sheet。

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

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

如有任何帮助,我们将不胜感激。

谢谢

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

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

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

A Workbook 对象在 任何 sheet 时触发 SheetActivate 事件(无论是 WorksheetChart sheet,或任何其他类型的 sheet) 被激活 - 您通过相应处理程序的 Sh 参数获得激活的 sheet。

A Workbook 对象在成为 ActiveWorkbook.

时也会触发自己的 Activate 事件

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

Select Workbook 来自 ThisWorkbook 中代码窗格左上角的组合框,然后 select 来自右侧组合框的事件,让 VBE 自动生成具有正确签名的事件处理程序原型:

如果你需要处理 Application-wide 事件,事情会变得有点复杂,但关键是你需要有一个 class 模块(可以是 ThisWorkbook) 声明了一个 WithEvents 变量:

Private WithEvents App As Excel.Application

现在左上角的下拉列表将列出 App,当它被 select 编辑时,右上角的下拉列表将让您选择一个 Excel.Application 事件来处理...前提是你 Set 这个 App 对象变量到一个有效的 Excel.Application 引用,比如说,在 Workbook_Open 处理程序中:

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

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