excel - 如何在 VBA 中手动触发工作表的激活事件?

标签 excel vba

我有一个工作表:

Private Sub Worksheet_Activate()
    MsgBox "Ran"
End Sub
我制作的工具栏上有一个按钮。我想要它做的是在当前选定的 WorkSheet 上触发此方法。
我想我可以做 Call ActiveWorksheet.ActivateCall Worksheet.Activate但是虽然这些似乎执行没有错误,但没有调用该方法。
作为一种解决方法,我考虑添加一个公共(public) DoActivate方法,但它似乎有点蹩脚,我可能不得不摆弄CallByName让它工作(并且开发人员必须记住在每个工作表上实现此方法)。
我的 Activate 方法没有通过上面的代码手动调用,或者没有合适的解决方法来获得我正在寻找的东西,是否有原因?

最佳答案

将您的代码移动到名为 OnActivate 的新 Sub

Private Sub Worksheet_Activate()
    OnActivate
End Sub

Private Sub OnActivate() 'or Public if you call from another module
    MsgBox "Ran"
End Sub
Worksheet_Activate()可以通过 Worksheet_Activate 从模块内部手动调用事件处理程序像任何其他潜艇一样(尽管这不是 IMO 的好方法)
如果您想确保所有工作表具有相同的方法,那么您可以让它们实现一个接口(interface):例如
类(class)模块:IActivateHandler
Public Sub OnActivate()
End Sub
然后在 Sheet1、2、3 等中:
Implements IActivateHandler

Private Sub IActivateHandler_OnActivate()
    MeOnActivate
End Sub

Private Sub Worksheet_Activate()
    MeOnActivate
End Sub

Private Sub MeOnActivate() 
    MsgBox "Ran"
End Sub
和按钮:
Private Sub Button1_Click()
    Dim sheetToCall As IActivateHandler
    ' Debug.Assert TypeOf ActiveSheet Is IActivateHandler
    Set sheetToCall = ActiveSheet 'gets the IActivateHandler of the sheet, ensuring it is defined. Will error if it isn't
    sheetToCall.OnActivate 'runs the IActivateHandler_OnActivate() method of sheet1
End Sub

关于excel - 如何在 VBA 中手动触发工作表的激活事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69883396/

相关文章:

vba - 将长日期重新格式化为与 Excel 中使用的语言不同的语言

Excel 查找返回唯一值

Excel 宏生成的文件副本保留指向原始文件的链接

VBA集合: list of keys

vba - 在 Excel VBA 中向用户提供范围选择工具/实用程序

html - 向要在 .HTMLBody 中使用的字符串添加空格

excel - 根据工作表名称更改单元格的值

r - 从 R 中的 netCDF 中提取时间序列

sql - Excel/VBA : How to paste SQL query with proper string formatting

vba - Internet Explorer 11 自动化 VBA 文档为空