2014-07-16 59 views
0

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

我想要隐藏在特定工作表中的所有后续工作表中的相同行。

这可能吗?

在此先感谢

+0

很好的问题 - 没有直接的办法这样做(没有C olumn_Hide类型事件afaik),但有一个解决方法,我将在测试后发布。你使用Excel 2007或更新? – hnk

+0

嗨,下面的答案有用吗? – hnk

回答

2

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

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

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

参考:此优良溶液通过安迪教皇here(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> 

自定义用户界面编辑器截图: enter image description here

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