小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

用VBA自定義WORD菜單和工具欄,實現(xiàn)多風格界面

 飛來山上 2015-12-28

用VBA自定義WORD菜單和工具欄,實現(xiàn)多風格界面

(2011-06-26 08:26:05)

    使用一個包含VBA代碼的Word模板文件,通過“加載”方式直接運行,運行后將在Word XP的主界面中新增菜單和工具欄,并提供了幾套適合不同工作環(huán)境的界面布局,單擊相應菜單即可實現(xiàn)不同風格界面布局的切換。
標準風格:顯示主菜單欄以及常用、格式兩個工具欄,并將文本編輯區(qū)設置為“藍底白字”。
簡單風格:僅顯示主菜單欄和程序新建的工具欄,并將文本編輯區(qū)恢復為“白底黑字”,如圖1所示。單擊工具欄上的按鈕,則會顯示對話框。
繪圖和制表風格:顯示主菜單欄和常用、格式、繪圖、圖片、符號欄以及表格和邊框工具欄等,并將文本編輯區(qū)恢復為“白底黑字”。
用VBA自定義WORD菜單和工具欄,實現(xiàn)多風格界面
多風格界面的實現(xiàn)方法: 

一、創(chuàng)建工具欄和菜單的相關知識:

 

1.CommandBars集合

Office軟件中,每個軟件所有的工具欄均可用該集合來代表,該集合可通過名稱或索引號來指定菜單欄或工具欄,如“CommandBars("Formatting")”,即通過名稱“Formatting”指定了“格式工具欄”。Add方法用于新建工具欄,并返回CommandBar對象。

2.CommandBar對象

該對象代表工具欄,新建工具欄的控件均以該對象為載體,是VBA工具欄開發(fā)的核心對象,其常用方法和屬性如下:

Position屬性:用于設置工具欄的位置,可通過VBA常量將工具欄的位置設置為置頂、居左、居右、置下或浮動。

Visible屬性:用于設置工具欄是否可見。

Enabled屬性:用于設置工具欄是否可用。

Reset方法:將內置工具欄的設置重置為默認設置,刪除其中的自定義控件,在恢復軟件原有工具欄或菜單時非常有用。

3.CommandBarPopup 對象

  該對象代表工具欄中的一個彈出式控件,其實Office軟件的菜單也可理解為一個彈出式的控件,而菜單欄可以視為“另類”的工具欄。因此,通過該對象即可添加菜單欄,方法和添加工具欄類似。

4.CommandBarButton對象

  該對象代表工具欄的按鈕控件,是常用的工具欄二次開發(fā)控件,其常用方法和屬性如下:
OnAction屬性:用于設置VBA代碼過程名(該代碼過程不可使用參數(shù)),該過程在單擊按鈕后運行。

 

Style屬性:用于設置工具欄按鈕的顯示方式,可通過VBA常量進行設置。

FaceId屬性:用于設置工具欄按鈕的圖標編號,即設置工具欄按鈕的外觀。自定義圖標的工具欄按鈕,其FaceId屬性值需設置為0。

BeginGroup屬性:用于設置控件是否分組顯示。

5.CommandBarComboBox對象

  該對象代表工具欄中的組合框、下拉框或文本框控件,也是常用的工具欄二次開發(fā)控件。

二、WORD自動宏

  為使模板中的VBA代碼可在某些特定操作中(如加載或打開時)自動執(zhí)行,必須通過VBA提供的自動宏來實現(xiàn)。

  自動宏是一些特殊的宏,這些宏可在執(zhí)行特定操作時運行(類似DOS時代在系統(tǒng)啟動時執(zhí)行的“AutoExec.bat”文件)。以Word XP為例,其提供的自動宏如下所述:

AutoExec宏:啟動Word 或加載全局模板觸發(fā)。
AutoNew宏:生成新文檔時觸發(fā)。
AutoOpen宏:打開已有文檔時觸發(fā)。
AutoClose宏:關閉文檔時觸發(fā)。
AutoExit宏:退出Word XP或卸載全局模板時觸發(fā)。

 

  正如其他宏,自動宏可以保存于 Normal 模板、其他模板或文檔之中。唯一的例外是:AutoExec 宏,它只有保存在 Startup 文件夾的 Normal 模板或共用模板中才能自動運行。


    在命名沖突的情況下(多個自動宏名相同),Word 運行上下文中最近的自動宏。例如,如果同時在文檔和附加模板中建立了 AutoClose 宏,只有文檔中的宏能夠運行。如在 Normal 模板中建立了 AutoNew 宏,只有當文檔或其附加模板中沒有名為 AutoNew 的宏時,該自動宏才能運行。


    如果用戶按下 Shift 鍵可以終止宏的運行。例如,新建一個文檔(該文檔基于包含 AutoNew 宏的模板),按下 Shift 鍵可以終止 AutoNew 宏的運行。方法是按下 Shift 鍵的同時單擊【文件】菜單下【新建】對話框中的【確定】按鈕,直到顯示新文檔。在運行可能觸發(fā)自動宏的宏時,可用下列指令終止自動宏的運行。
    WordBasic.DisableAutoMacros


注意:
    宏病毒就是利用自動宏的特點來自動進行傳播的,并不需要人工運行。

 

 三、新建工具欄和自定義菜單的代碼:

錄制“宏”之后,在VBA的工程資源管理器中將自動添加一個名稱為“NewMacros”的模塊,雙擊該模塊的圖標,即可顯示代碼編輯窗口。

1.定義一些全局變量
Dim Obj_Toolbar As CommandBar '代表工具欄的變量
Dim Obj_Menu As CommandBarPopup '代表菜單的變量
Dim Obj_Toolbar_button As CommandBarButton '代表菜單項和按鈕的變量

2.編制生成工具欄和菜單的子程序
Sub addbutton() '創(chuàng)建工具欄和菜單并設置屬性的子程序
    deletebutton '調用刪除工具欄和菜單的子程序
    Set Obj_Toolbar = Application.CommandBars.Add("My_Custom_Bar") '新建工具欄,“My_Custom_Bar”代表工具欄的名稱
    Set Obj_Menu = Obj_Toolbar.Controls.Add(Type:=msoControlPopup, ID:=1) '在工具欄上新建下拉菜單,“ID:=1”代表該工具欄的功能由用戶自定義,下同
    With Obj_Menu '設置下拉菜單的屬性
        .Caption = "風格切換" '設置標題
        .BeginGroup = True '設置分組
    End With
    Set Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton, ID:=1) '新建菜單項,下同
    With Obj_Toolbar_button '設置菜單項的屬性,下同
        .Caption = "標準風格"
        .BeginGroup = True
        .OnAction = "Standard_Style" '設置單擊菜單項執(zhí)行的子程序名稱
    End With
    Set Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton, ID:=1) '新建其他的菜單項,并設置屬性
    With Obj_Toolbar_button
        .Caption = "簡單風格"
        .BeginGroup = True
        .OnAction = "Simple_Style"
    End With
    Set Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton, ID:=1)
    With Obj_Toolbar_button
        .Caption = "繪圖和制表風格"
        .BeginGroup = True
        .OnAction = "Draw_Table_Style"
    End With
    Set Obj_Toolbar_button = Obj_Toolbar.Controls.Add(Type:=msoControlButton, ID:=1) '新建工具欄按鈕
    With Obj_Toolbar_button '設置按鈕的屬性
        .Caption = "關于"
        .Style = msoButtonIconAndCaption
        .FaceId = 984
        .OnAction = "Show_Msg"
    End With
    With Obj_Toolbar '設置工具欄的屬性
        .Visible = True '工具欄可視
        .Enabled = True '工具欄可用
        .Position = msoBarTop '工具欄置頂
    End With
    Set Obj_Menu = Application.CommandBars("Menu Bar").Controls.Add(Type:=msoControlPopup, ID:=1) '在Word XP的主菜單中新建菜單,“Menu Bar”代表Word XP主菜單的名稱
    With Obj_Menu '設置新建菜單的屬性
        .Caption = "風格切換"
    End With
    Set Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton, ID:=1) '在新建菜單中添加菜單項,下同
    With Obj_Toolbar_button '設置新建菜單項的屬性,下同
        .Caption = "標準風格"
        .BeginGroup = True
        .OnAction = "Standard_Style"
    End With
    Set Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton, ID:=1) '新建其他的菜單項,并設置屬性
    With Obj_Toolbar_button
        .Caption = "簡單風格"
        .BeginGroup = True
        .OnAction = "Simple_Style"
    End With
    Set Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton, ID:=1)
    With Obj_Toolbar_button
        .Caption = "繪圖和制表風格"
        .BeginGroup = True
        .OnAction = "Draw_Table_Style"
    End With
End Sub
3.編制刪除工具欄和菜單的子程序
Sub deletebutton() '刪除工具欄和菜單的子程序
    Dim tempbar As CommandBar '定義臨時工具欄變量
    On Error Resume Next '該語句用于忽略錯誤
    Application.CommandBars("Menu Bar").Reset '重新設置Word XP的主菜單,即刪除新建的菜單
    For Each tempbar In Application.CommandBars '通過“For Each…Next”語句遍歷Word XP所有的工具欄
        If tempbar.Name = "My_Custom_Bar" Then '如名稱和新建的工具欄相同
            tempbar.Visible = False '設置為不可視
            tempbar.Delete '刪除該工具欄
        End If
    Next
End Sub

4。編寫控件和菜單項對應的事件代碼
'“簡單風格”子程序,添加“Private”關鍵字用于將該子程序設置為局部型,下同
Private Sub Simple_Style()
    resetall '調用重新設置所有工具欄的子程序,下同
    '進行“簡單風格”相對應的操作,在前述內容中已進行了解讀,下同
    CommandBars("Standard").Visible = False
    CommandBars("Formatting").Visible = False
    CommandBars("Drawing").Visible = False
    Options.BlueScreen = False
End Sub
'“標準風格”子程序
Private Sub Standard_Style()
    resetall
    CommandBars("Standard").Visible = True
    CommandBars("Formatting").Visible = True
    Options.BlueScreen = True
End Sub
'“繪圖和制表風格”子程序
Private Sub Draw_Table_Style()
    resetall
    CommandBars("Standard").Visible = True
    CommandBars("Formatting").Visible = True
    CommandBars("Drawing").Visible = True
    CommandBars("Tables and Borders").Visible = True
    CommandBars("符號欄").Visible = True
    CommandBars("Picture").Visible = True
    Options.BlueScreen = False
End Sub
 5. 編寫輔助的子程序
  上達三段代碼中,均需調用一個重新設置所有工具欄的子程序,該子程序的功能為設置所有相關工具欄為不可視,然后按需要顯示相關的工具欄,代碼如下所示:

'重新設置所有工具欄的子程序
Private Sub resetall()
    '以下代碼很容易理解,可通過修改前面錄制的“宏”代碼來編寫
    CommandBars("Standard").Visible = False
    CommandBars("Formatting").Visible = False
    CommandBars("Drawing").Visible = False
    CommandBars("Tables and Borders").Visible = False
    CommandBars("符號欄").Visible = False
    CommandBars("Picture").Visible = False
    Options.BlueScreen = False
End Sub

 6. 編寫輔助的子程序
  工具欄按鈕單擊后需通過子程序來顯示對話框,代碼如下所示:
Private Sub Show_Msg()
    '調用“MsgBox”函數(shù)來顯示對話框,可參見VBA的幫助
    MsgBox "歡迎來到VBA的世界!", vbInformation, "信息"
End Sub

7. 保存相應的格式

    為實現(xiàn)打開文件時自動運行代碼并在關閉時恢復Word的原有設置,需將其保存為模板。然后在代碼模塊中添加“AutoExec”自動宏,并通過該宏調用前面創(chuàng)建的“addbutton”過程,此外還需添加“AutoExit”自動宏,并通過該宏調用前面創(chuàng)建的“deletebutton”過程,代碼如下所示:
Sub AutoExec()
    addbutton
End Sub
Sub AutoExit()
    deletebutton
End Sub


參考:http://school./office/word/2006-07-04/1151991787d7933.shtml

分享:

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多