隐藏行或列时Excel VBA中的触发器事件

隐藏行或列时Excel VBA中的触发器事件,excel,vba,row,hide,ribbon,Excel,Vba,Row,Hide,Ribbon,当我手动隐藏行/列时,是否有方法在Excel VBA中触发事件(调用子事件) 当同一行隐藏在特定的工作表中时,我希望它隐藏在以下所有工作表中 可能吗 提前感谢没有捕获隐藏或取消隐藏列的直接事件触发器。有一些笨拙的变通方法,在单元格中使用公式,但这些方法在使用时感觉像是一堆乱七八糟的东西,不太灵活 但是,如果使用Excel 2007或更高版本,则有一种间接方式可以捕获此事件。这是整洁和非常灵活的 修改功能区XML(如果存在):您需要能够修改功能区的customUI14.XML(对于Excel 20

当我手动隐藏行/列时,是否有方法在Excel VBA中触发事件(调用子事件)

当同一行隐藏在特定的工作表中时,我希望它隐藏在以下所有工作表中

可能吗


提前感谢

没有捕获隐藏或取消隐藏列的直接事件触发器。有一些笨拙的变通方法,在单元格中使用公式,但这些方法在使用时感觉像是一堆乱七八糟的东西,不太灵活

但是,如果使用Excel 2007或更高版本,则有一种间接方式可以捕获此事件。这是整洁和非常灵活的

  • 修改功能区XML(如果存在):您需要能够修改功能区的
    customUI14.XML
    (对于Excel 2010)或
    customUI.XML
    (对于Excel 2007)
  • 创建自定义Ribbon UI XML文件(如果不存在):您可以使用Ron De Bruin的优秀自定义UI编辑器(这在许多Microsoft官方示例中也得到认可)
  • 捕获事件的XML更改:在自定义UI编辑器中打开Excel文件并添加XML代码,如下所示。这将启用列隐藏或取消隐藏事件来触发代码中的宏
  • 执行操作的VBA代码:添加下面列出的代码,以便在捕获事件后采取操作
  • 参考:安迪·波普(MSDN链接)提供了这一出色的解决方案

    自定义XML代码:

    <customUI  xmlns="http://schemas.microsoft.com/office/2006/01/customui" >
        <commands >
            <command 
                idMso="ColumnsHide"
                onAction="Column_Hide_Macro"/>
            <command 
                idMso="ColumnsUnhide"
                onAction="Column_UnHide_Macro"/>
        </commands >
    </customUI>
    
    Sub Column_Hide_Macro(control As IRibbonControl, ByRef CancelDefault)
        MsgBox ("You have hidden a column")
    
        ' You may put your code here
        ' to check if your monitored row is hidden
    
        CancelDefault = False   ' This enables the default action to continue
    End Sub
    
    Sub Column_UnHide_Macro(control As IRibbonControl, ByRef CancelDefault)
        MsgBox ("You have unhidden a column")
    
        ' You may put your code here
        ' to check if your monitored row is unhidden
    
        CancelDefault = False   ' This enables the default action to continue
    End Sub
    

    很好的问题-没有直接的方法(没有列隐藏类型事件afaik),但是有一个解决方法,我将在测试后发布。您使用的是Excel 2007还是更新版本?您好,下面的答案有用吗?