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

Mar*_*inF 0 excel vba ribbon row hide

当我手动隐藏行/列时,有没有办法触发Excel VBA中的事件(调用子)?

当隐藏在特定工作表中时,我希望在所有后续工作表中隐藏相同的行.

那可能吗?

提前致谢

hnk*_*hnk 5

没有直接事件触发器来捕获隐藏或取消隐藏列.有一些笨拙的解决方法,在细胞中使用公式,但在使用时感觉像是一个kludge而不是非常灵活.

但是,如果使用Excel 2007或更高版本,则可以通过间接方式捕获此事件.这很整洁,非常灵活.

  1. 修改功能区XML(如果存在):您需要能够修改功能区customUI14.xml(适用于Excel 2010)或customUI.xml(适用于Excel 2007).
  2. 创建自定义功能区UI XML文件(如果不存在):您可以使用来自http://www.rondebruin.nl/win/s2/win001.htm的 Ron De Bruin优秀的自定义UI编辑器(这也得到了很多认可)官方微软的例子).
  3. 捕获事件的XML更改:在自定义UI编辑器中打开Excel文件并添加XML代码,如下所示.这将使列隐藏或取消隐藏事件能够在代码中触发宏.
  4. 用于执行操作的VBA代码:添加下面列出的代码,以便在捕获事件后执行操作.

参考:这个优秀的解决方案是由Andy Pope 在这里提供的(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>
Run Code Online (Sandbox Code Playgroud)

自定义UI编辑器截图: 在此输入图像描述

VBA代码:

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
Run Code Online (Sandbox Code Playgroud)