2014-07-16 109 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