Board logo

標題: [轉貼] VBA-自訂CommandBarButton事件 (插入自動圖文集) [打印本頁]

作者: 偉婕    時間: 2010-6-30 23:25     標題: VBA-自訂CommandBarButton事件 (插入自動圖文集)

原發表者:leonchou (2005-05-28)

這次的需求是自訂一個下拉式功能表,加入數個按鈕;按鈕的動作是在文件中插入以按鈕名稱為名的自動圖文集項目。
由於 CommandBarButton的 OnAtion 不接受帶參數的巨集,又不想重複寫多個類似的巨集,所以有以下的解決方案。

其實在建立CommandBarButton時直接指定爲自動圖文集項目是可行的,但如果你真的不想那樣做,那麼以下介紹自訂 CommandBarButton 的 Click 事件:

1. 新增一個物件類別模組 (使用預設名稱Class1),包含以下代碼 --
  1. Public WithEvents cmdBarButton As Office.CommandBarButton
  2. Private Sub cmdBarButton_Click(ByVal Ctrl As Office.CommandBarButton, _
  3.   CancelDefault As Boolean)
  4.   InsertAutoText Ctrl.Caption
  5.   CancelDefault = True
  6. End Sub
複製代碼
2. 建立下拉式功能表巨集所在模組的程式碼 --
  1. Dim btnClass() As New Class1
  2. Public Sub CreateCommandBarPopup()
  3.   Dim objCommandBarControl As Office.CommandBarControl
  4.   Dim objCommandBarButton As Office.CommandBarButton
  5.   
  6.   '刪除原有的下拉式功能表控制項
  7.   For Each objCommandBarControl In CommandBars("Standard").Controls
  8.     If objCommandBarControl.Caption = "我的功能表\" Then
  9.       objCommandBarControl.Delete
  10.     End If
  11.   Next objCommandBarControl
  12.   
  13.   '在"一般"工具列建立下拉式功能表及按鈕
  14.   With CommandBars("Standard").Controls.Add(msoControlPopup)
  15.     .Caption = "我的功能表\\"
  16.     myCount = 0
  17.     For Each itm In Array("審計單位", "建設單位")
  18.       Set objCommandBarButton = .Controls.Add(msoControlButton)
  19.       With objCommandBarButton
  20.         .Caption = itm
  21.         .Tag = .Caption
  22.       End With
  23.       myCount = myCount + 1
  24.       ReDim Preserve btnClass(1 To myCount)
  25.       '將CommandBarButton逐一連結到上面自定義的cmdBarButton物件
  26.       Set btnClass(myCount).cmdBarButton = objCommandBarButton
  27.     Next itm
  28.   End With
  29. End Sub

  30. Sub InsertAutoText(strAutoText As String)
  31. ' 在目前位置插入自動圖文集
  32.   ActiveDocument.AttachedTemplate.AutoTextEntries(strAutoText).Insert Where:=Selection.Range
  33. End Sub
複製代碼
如此當按下自定義功能表的按鈕就會觸發物件類別模組Class1 的cmdBarButton_Click 事件,自動判別其 Caption 屬性並呼叫 InsertAutoText 程式。
PS.
1. 相關的自動圖文集項目必須已存在,若沒有請先建立。
2. 在文件中插入自動圖文集的代碼也可以直接寫在類模組 Class1 的 cmdBarButton_Click 事件之中。
作者: yangjie    時間: 2014-1-19 14:01

回復 1# 偉婕
可否請教版主大大
      Excel VBA裡     
      Path1 = Application.ActiveWorkbook.Path      
      在Excel VBA裡 應如何寫語法 去打開   path1 & "\A4_3x7.doc"   
                            萬分感激




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)