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

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

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

那可能吗?

提前致谢

没有直接的事件触发器来捕获隐藏或取消隐藏列。 有一些笨拙的解决方法,在单元格中使用公式,但是在使用时感觉像是一团糟,而不是很灵活。

但是,如果您使用Excel 2007或更新版本,则有间接的方法来捕获此事件。 这是整洁,非常灵活。

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

参考:这个优秀的解决scheme是由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> 

自定义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