久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

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

     飛來山上 2015-12-28

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

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

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

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

     

    1.CommandBars集合

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

    2.CommandBar對象

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

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

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

    Enabled屬性:用于設(shè)置工具欄是否可用。

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

    3.CommandBarPopup 對象

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

    4.CommandBarButton對象

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

     

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

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

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

    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宏:關(guān)閉文檔時觸發(fā)。
    AutoExit宏:退出Word XP或卸載全局模板時觸發(fā)。

     

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


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


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


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

     

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

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

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

    2.編制生成工具欄和菜單的子程序
    Sub addbutton() '創(chuàng)建工具欄和菜單并設(shè)置屬性的子程序
        deletebutton '調(diào)用刪除工具欄和菜單的子程序
        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 '設(shè)置下拉菜單的屬性
            .Caption = "風(fēng)格切換" '設(shè)置標(biāo)題
            .BeginGroup = True '設(shè)置分組
        End With
        Set Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton, ID:=1) '新建菜單項,下同
        With Obj_Toolbar_button '設(shè)置菜單項的屬性,下同
            .Caption = "標(biāo)準(zhǔn)風(fēng)格"
            .BeginGroup = True
            .OnAction = "Standard_Style" '設(shè)置單擊菜單項執(zhí)行的子程序名稱
        End With
        Set Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton, ID:=1) '新建其他的菜單項,并設(shè)置屬性
        With Obj_Toolbar_button
            .Caption = "簡單風(fēng)格"
            .BeginGroup = True
            .OnAction = "Simple_Style"
        End With
        Set Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton, ID:=1)
        With Obj_Toolbar_button
            .Caption = "繪圖和制表風(fēng)格"
            .BeginGroup = True
            .OnAction = "Draw_Table_Style"
        End With
        Set Obj_Toolbar_button = Obj_Toolbar.Controls.Add(Type:=msoControlButton, ID:=1) '新建工具欄按鈕
        With Obj_Toolbar_button '設(shè)置按鈕的屬性
            .Caption = "關(guān)于"
            .Style = msoButtonIconAndCaption
            .FaceId = 984
            .OnAction = "Show_Msg"
        End With
        With Obj_Toolbar '設(shè)置工具欄的屬性
            .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 '設(shè)置新建菜單的屬性
            .Caption = "風(fēng)格切換"
        End With
        Set Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton, ID:=1) '在新建菜單中添加菜單項,下同
        With Obj_Toolbar_button '設(shè)置新建菜單項的屬性,下同
            .Caption = "標(biāo)準(zhǔn)風(fēng)格"
            .BeginGroup = True
            .OnAction = "Standard_Style"
        End With
        Set Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton, ID:=1) '新建其他的菜單項,并設(shè)置屬性
        With Obj_Toolbar_button
            .Caption = "簡單風(fēng)格"
            .BeginGroup = True
            .OnAction = "Simple_Style"
        End With
        Set Obj_Toolbar_button = Obj_Menu.Controls.Add(Type:=msoControlButton, ID:=1)
        With Obj_Toolbar_button
            .Caption = "繪圖和制表風(fēng)格"
            .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 '重新設(shè)置Word XP的主菜單,即刪除新建的菜單
        For Each tempbar In Application.CommandBars '通過“For Each…Next”語句遍歷Word XP所有的工具欄
            If tempbar.Name = "My_Custom_Bar" Then '如名稱和新建的工具欄相同
                tempbar.Visible = False '設(shè)置為不可視
                tempbar.Delete '刪除該工具欄
            End If
        Next
    End Sub

    4。編寫控件和菜單項對應(yīng)的事件代碼
    '“簡單風(fēng)格”子程序,添加“Private”關(guān)鍵字用于將該子程序設(shè)置為局部型,下同
    Private Sub Simple_Style()
        resetall '調(diào)用重新設(shè)置所有工具欄的子程序,下同
        '進(jìn)行“簡單風(fēng)格”相對應(yīng)的操作,在前述內(nèi)容中已進(jìn)行了解讀,下同
        CommandBars("Standard").Visible = False
        CommandBars("Formatting").Visible = False
        CommandBars("Drawing").Visible = False
        Options.BlueScreen = False
    End Sub
    '“標(biāo)準(zhǔn)風(fēng)格”子程序
    Private Sub Standard_Style()
        resetall
        CommandBars("Standard").Visible = True
        CommandBars("Formatting").Visible = True
        Options.BlueScreen = True
    End Sub
    '“繪圖和制表風(fēng)格”子程序
    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. 編寫輔助的子程序
      上達(dá)三段代碼中,均需調(diào)用一個重新設(shè)置所有工具欄的子程序,該子程序的功能為設(shè)置所有相關(guān)工具欄為不可視,然后按需要顯示相關(guān)的工具欄,代碼如下所示:

    '重新設(shè)置所有工具欄的子程序
    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()
        '調(diào)用“MsgBox”函數(shù)來顯示對話框,可參見VBA的幫助
        MsgBox "歡迎來到VBA的世界!", vbInformation, "信息"
    End Sub

    7. 保存相應(yīng)的格式

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


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

    分享:

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

      0條評論

      發(fā)表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 国产午夜精品理论大片| 无套内谢少妇一二三四| 一本精品99久久精品77| 漂亮人妻中文字幕丝袜| 冲田杏梨AV一区二区三区| 亚洲AV综合色区无码二区偷拍| 国内不卡一区二区三区| 国产萌白酱喷水视频在线观看| 人妻少妇精品一区二区三区| 四虎成人精品永久网站| 老子影院午夜精品无码| 国产在线午夜不卡精品影院| 成人欧美一区二区三区在线观看| 亚洲成人四虎在线播放| 国产欧美日韩高清在线不卡| bt天堂新版中文在线| 日本无遮挡吸乳视频| 亚洲欧美日韩国产综合一区二区 | 国产L精品国产亚洲区久久| 日韩精品有码中文字幕| 久久精品国产亚洲夜色AV网站| 久久亚洲国产精品久久| 久久精品国产亚洲AV无码偷窥| 无码日韩做暖暖大全免费不卡| 自拍日韩亚洲一区在线| 免费国产VA在线观看视频| 久久午夜无码免费| 亚洲成AV人片在线观看WV| 国产成人不卡一区二区| 黄又色又污又爽又高潮动态图 | 无码乱人伦一区二区亚洲| 久久精品国产99国产精品严洲| 女人被爽到高潮视频免费国产| 国产成人欧美日本在线观看| 成人午夜在线观看日韩| 国产精品久久久久久AV| 国产精品久久久尹人香蕉| 大香伊蕉在人线国产最新2005| 国产精品第一二三区久久蜜芽| 午夜色大片在线观看| 国产综合久久99久久|