【问题标题】:Trigger Event in Excel VBA when Row or Column is hidden隐藏行或列时在 Excel VBA 中触发事件
【发布时间】:2014-09-06 18:18:05
【问题描述】:

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

当同一行隐藏在特定工作表中时,我希望将同一行隐藏在所有后续工作表中。

这可能吗?

提前致谢

【问题讨论】:

  • 优秀问题 - 没有直接的方法(没有 Column_Hide 类型事件 afaik),但有一个解决方法,我将在测试后发布。您使用的是 Excel 2007 或更高版本吗?
  • 嗨,下面的答案有用吗?

标签: excel vba row hide ribbon


【解决方案1】:

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

但是,如果您使用 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 编辑器(在很多官方 Microsoft 示例中也得到了认可)。李>
  3. 用于捕获事件的 XML 更改: 在自定义 UI 编辑器中打开 Excel 文件并添加 XML 代码,如下所示。这将使列隐藏或取消隐藏事件能够触发代码中的宏。
  4. 用于执行操作的 VBA 代码:添加下面列出的代码以在捕获事件后采取行动。

参考:这个出色的解决方案由 Andy Pope 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>

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 2022-11-25
    • 2021-02-10
    • 1970-01-01
    相关资源
    最近更新 更多