久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

運用VBA實現(xiàn)EXCLE的菜單和工具欄方法[51自學網(wǎng)園地]

 博覽網(wǎng)文 2014-12-23

菜單和工具欄

建立有用的自定義應用程序的基本原則之一是提供用戶與Visual Basic應用程序之間簡潔一致的交互方式。菜單和工具欄為向用戶顯示簡單的命令和選項提供了快捷,、方便,,而且被廣泛接受的方式。在Microsoft Office 中,,很容易對菜單和工具欄進行設計和修改,;Microsoft Excel 采用了統(tǒng)一的自定義化的界面-“自定義”對話框。因為所有的菜單和工具欄都用同樣類型的類來表示-CommandBar 對象-所以也很容易從Visual Basic中來定義和控制它們,。

修改用戶界面的工具

有兩種自定義菜單欄和工具欄的工具:共享“自定義”對話框和Visual Basic,。雖然,在每個Office應用程序之間,,“自定義”對話框仍有很小的區(qū)別,,但是用于修改菜單欄和工具欄的可編程對象在所有的應用程序中都是相同的。本節(jié)講述了“自定義”對話框和共享可編程對象,,以及何時和怎樣使用這些工具,。

“自定義”對話框

本章的這一節(jié)討論怎樣使用“自定義”對話框和Visual Basic代碼來修改菜單欄和工具欄。在兩種技術都可作同樣修改的場合下,,使用“自定義”對話框能更快和更容易地完成設計時刻更改,。

顯示“自定義”對話框

在“視圖”菜單里,指到“工具欄”,,然后單擊“自定義”,。

Microsoft Excel在“自定義”對話框(含“工具欄”表,“命令”表和“選項”表)中提供了相同的控件,,但是前三種應用軟件還在“工具欄”表和“命令”表中包含了其他一些元素,,專門用于這些軟件本身的自定義。這些元素將在下面的段落中進行介紹,。

Microsoft Excel “工具欄”表包含一個“附加”按鈕,,用來顯示“附加工具欄”對話框,。用戶可以用這個對話框把菜單欄從應用程序的工作區(qū)拷貝到活動工作區(qū)。要作更多的了解,,請參考本章后面“用戶界面的更改范圍”一節(jié)的內容,。

當用戶在任何Microsoft Office 應用程序中打開“自定義”對話框后,就可以按同樣的步驟來修改任何內置或自定義的菜單和工具欄,,步驟如下。

在“工具欄”對話框的“工具欄”一表中,,用戶可以選擇出要顯示和修改的菜單欄或工具欄,,在它們的名字前面的復選框里打上鉤。新創(chuàng)建的菜單欄或工具欄會自動顯示出來,。
單擊任何一個菜單項(包括菜單和子菜單的標題)或者是工具欄控件,,把它選中。當打開“自定義”對話框的時候,,和控件相關聯(lián)的命令是不能運行的,。
在選定的項或控件上按下鼠標右鍵,顯示出快捷菜單,,該菜單中包含了可使用的自定義選項,。菜單命令和工具欄按鈕的選項包括重新設置命令;刪除項或控件,;更改它的名字,;指出它是否有名字及圖標,或是兩者都有,;修改它的圖標,;以及設置它開始一組 (也就是說,在它的上方或下方有一條線),。
注釋 某些內置的命令或控件不能使用這些選項中的一種或幾種,;在快捷菜單上不能使用的選項將變成陰暗顯示。

當“自定義”對話框打開時,,用戶可以通過拖放來重新安排項和控件的順序,,還可以從“命令”表里添加新的項和控件。要做更多的了解,,請參考本章后面“菜單系統(tǒng)的設計時刻修改”以及“工具欄的設計時刻修改”兩節(jié)里的有關步驟,。

Visual Basic

通常,要創(chuàng)建或修改引進了Visual Basic程序的Microsoft Office應用程序的用戶界面,,應當使用“自定義”對話框,。用戶通過“自定義”對話框對用戶界面所做的更改叫做設計時刻更改。

用戶也可以在Visual Basic代碼中使用共享的Microsoft Office對象模型的命令欄部分,,以此來添加和修改菜單及工具欄:高級對象是CommandBars集合,,在所有的Microsoft Office應用程序中由CommandBars屬性返回,。每一個菜單欄、快捷鍵菜單,,以及工具欄都可以用該集合中的某個CommandBar對象來表示,。每一個CommandBar對象包括一個CommandBarControls集合;在菜單欄或工具欄上的每個控件都可以用幾個這樣的集合來表示,。

要了解有關CommandBars集合,、它所包含的所有對象,以及這些對象的屬性和方法的更多內容,,請參考“命令欄概述”和“幫助”中相應的對象,、屬性和方法主題。

用戶也可以編寫代碼,,運行一次就能創(chuàng)建或更改菜單欄或工具欄的元素,;實際上,這些代碼模擬了在“自定義”對話框中所進行的設計時刻更改,。但是在某些Microsoft Office應用程序中,,可能要求用戶將這類Visual Basic 代碼和“自定義”對話框組合起來去設計Visual Basic應用程序。在以下一些常見場合,,用戶必須使用代碼和容器應用程序界面的組合:

如果用戶不能使用“自定義”對話框來創(chuàng)建一個新的菜單欄時,,就需要使用Visual Basic來完成創(chuàng)建菜單欄的任務。在Visual Basic中建好菜單欄后,,可以使用“自定義”對話框來設計該菜單欄中的各個菜單,。
如果用戶的容器應用程序不能在“自定義”對話框打開時,顯示內置或自定義的快捷菜單,,用戶必須使用Visual Basic代碼去修改這些快捷菜單,。
如果用戶的容器應用程序不能提供用于在工具欄上添加或修改文本框、下拉式列表框,,或者組合框時,,用戶必須使用Visual Basic 代碼來添加和設計這些控件。
用戶也可以編寫存在于Visual Basic應用程序中的代碼,,該應用程序在運行時對菜單系統(tǒng)進行修改(例如,,用戶可以編寫在某種條件下禁用某菜單中的某一命令的代碼,或者根據(jù)用戶的動作給某個菜單欄添加一個菜單),。在用戶的Visual Basic 應用程序運行時,,用戶代碼產(chǎn)生的更改叫做運行時刻更改。

 

用戶界面的更改范圍

關于在何處對用戶界面進行更改以及怎樣存儲更改,,每一個Microsoft Office應用程序使用略微不同的規(guī)則,。理解怎樣才能控制更改的范圍是非常重要的,因為它決定了用戶的Visual Basic 應用程序顯示用戶自定義界面的能力。

可以通過三種方法,,在用戶自定義的應用程序中使用自定義菜單欄和快捷菜單:

用戶可以把自定義工具欄和工作區(qū)或工作簿一起保存,。當用戶從Microsoft Excel退出時,在工作區(qū)中的工具欄會自動地保存在文件Username8.xlb中(其中的“Username”是Windows95當前登錄的用戶名),。如果用戶沒有登錄,,文件存為Excel8.xlb。在工作簿里的工具欄保存在工作簿文件中,。

工作簿級的菜單欄和工具欄使用戶能夠方便地為自定義的應用程序(例如,,一個加載應用程序)創(chuàng)建一個美觀的用戶界面、分配自定義工具欄按鈕和它們支持的過程,。如果用戶打算分配帶有一個自定義應用程序的自定義工具欄,,就應該把該工具欄附加到包含那個應用程序的工作簿上,使得工具欄和應用程序那個保存在同一個文件里,。

將菜單欄或工具欄從工作區(qū)移動到工作簿

如果“自定義”對話框尚未打開,那么用鼠標指到“視圖”菜單里的“工具欄”上,,然后單擊“自定義”,。
在“工具欄”表上單擊“附加”按鈕。
顯示出“附加工具欄”對話框,。

在“自定義”對話框里,,單擊想要復制到活動工作簿的菜單欄或工具欄的名字。
單擊“復制”,。
所復制的菜單欄或工具欄的名字就出現(xiàn)在工作簿框中,。

用戶可以刪除原始的工作區(qū)級的菜單欄或工具欄,單擊“自定義”對話框中的“工具欄”表,,選擇要刪除的菜單欄或工具欄的名字,,然后單擊“刪除”按鈕。如果用戶沒有刪除菜單欄或工具欄在工作區(qū)的版本,,還可以對其進行更改而不會影響到工作簿中保存的版本,。如果用戶對工作區(qū)中的菜單欄或工具欄進行了更改,而且想更新工作簿中的版本使它同工作區(qū)的版本保持一致,,可以再次將工作區(qū)中的版本復制到工作簿里,,替換工作簿原來的版本。

把菜單欄或工具欄復制到工作簿之后,,該菜單欄或工具欄只有在用戶打開工作簿之后才可以使用,。菜單欄或工具欄在工作簿中的版本不但保留著它們的名字和內容,而且還保留著為菜單項或工具欄控件指定的代碼,;菜單欄或工具欄的位置,、大小以及形狀;它在屏幕上的顯示位置;和它是處于顯示狀態(tài)還是隱藏狀態(tài),。

用戶也可以刪除菜單欄或工具欄的工作簿版本,。

刪除菜單欄或工具欄的工作簿版本

如果“自定義”對話框尚未打開,用鼠標指到“視圖”菜單下的“工具欄”上,,然后單擊“自定義”,。
在“工具欄”表上,單擊“附加”按鈕,。
顯示出“附加工具欄”對話框,。

在工作簿框的“工具欄”內,單擊想刪除的菜單欄或工具欄的名字,。
單擊“刪除”按鈕,。
注釋 不能使用Visual Basic把菜單欄或工具欄附加到工作簿上或是從工作簿中把它們刪除。

當用戶打開包含一個或多個菜單欄或工具欄的工作簿時,,Microsoft Excel 首先判斷是否已經(jīng)存在有一個同名的工作區(qū)菜單欄或工具欄,。如果不存在,Microsoft Excel會創(chuàng)建一個新的工作區(qū)菜單欄或工具欄,,并且把在工作簿里的版本復制過來,。這樣一來,用戶得到了菜單欄或工具欄的最新副本,,用戶可以作許多變動:隱藏它,,或者從工作簿級的副本那兒復制菜單項或控件,也可以向把菜單項項或控件復制到工作簿級的副本里去,。

沒有辦法對菜單欄或工具欄進行重命名,,于是當工作簿再次打開時,工作區(qū)已經(jīng)存在著與工作簿版本同名的菜單欄或工具欄,,Microsoft Excel使用工作區(qū)的副本而不是將工作簿的版本重新進行裝載,。但是,當用戶單擊相應的菜單項項或控件時,,打開的工作簿里的菜單欄或工具欄所支持的過程仍然能夠運行,。

開發(fā)人員可以設計一個菜單欄或工具欄,然后把它附加到工作簿中,。當用戶打開工作簿時,,就能使用該自定義菜單欄或工具欄了。用戶既可以對它進行編輯,,還能把菜單項項或控件從中移動到個人的菜單欄或工具欄里,,這都不會影響保存在工作簿里的副本。當用戶退出Microsoft Excel時,,用戶更改后的菜單欄和工具欄和工作簿文件一起保存,。當用戶再次啟動Microsoft Excel時,,編輯過的菜單欄或工具欄仍然可以使用;單擊一個開發(fā)人員的菜單項或工具欄控件可以裝載工作簿,,其中包含了附加到那些菜單項或控件的過程,。要生成新的工作簿菜單欄或工具欄,可以刪除被編輯過的副本,。

選擇對用戶界面進行最佳增強

菜單是用戶界面命令的列表,,用戶可以從中選擇命令。菜單提供了一種方便且一致的方法對命令進行分組,,并且向用戶提供了使用它們的簡便方式。執(zhí)行相關任務的命令可以列在同一個菜單下,,同時命令還可以進行分組(用線與其他的命令或命令組分隔開),。子菜單構成了下一級的組織結構,快捷菜單把一組相關的命令組織起來,,用以完成一項專門的任務,。

用戶能夠為命令指定訪問鍵,從而可以用鍵盤發(fā)命令,,用戶還能夠為命令指定快捷鍵,,從而更快地使用命令。另外,,菜單比工具欄占用的空間要少,因為菜單中的各項只有在需要使用的時候才顯示出來,,并不需要在屏幕上分配專門的顯示空間,。另一方面,如果用戶想快速地以圖形方式使用命令,,那最好還是使用工具欄,。

工具欄包含一些快捷,用來執(zhí)行被頻繁使用的命令,。對表示某種特性設置(例如,,加粗或傾斜格式)、可視化命令以及用鼠標點擊執(zhí)行的命令來說,,使用工具欄較為理想,。另外,當用戶工作時,,工具欄始終顯示在屏幕上,,而菜單只有在使用的時候才顯示出來;在工具欄上找出某個特殊的按鈕要比在菜單欄里找出某條命令容易得多,。但是,,如果要方便地使用鍵盤命令,或是想顯示出命令的層次結構,抑或是可用的顯示屏幕有限,,那么最好使用菜單,。

如果需要演示用戶的一組復雜的選項,那么用對話框比工具欄和菜單都要強,。如果想在用戶正在使用的數(shù)據(jù)的附近安置工具,,那么最好的解決辦法可能就是在工作表或文檔里直接安置控件了。要做進一步詳細的了解,,請參考本書的第十二章“ActiveX 控件和對話框”,。

菜單系統(tǒng)

每一個Microsoft Office 應用程序的菜單系統(tǒng)都是由完整的一套菜單以及菜單上的菜單項所組成的。一個菜單可以是主菜單,、子菜單或是快捷菜單,。一個菜單項通常是一條命令或是一個子菜單的標題。在本章中,,“組件”這個術語一般指任何菜單或菜單項,。

菜單欄處在活動窗口的頂端,它顯示出所有菜單的名稱,,菜單可以隨時為應用程序所使用,。也就是說,Microsoft Office 應用程序能夠根據(jù)一次活動窗口的變化或一條Visual Basic指令相應地改變菜單欄的顯示,。例如,,當用戶在Microsoft Excel 中編輯圖表時,包含一組用于圖表環(huán)境的菜單的菜單欄會自動顯示出來,。

一個菜單是菜單項的一張列表,,菜單項在用戶單擊菜單欄上的菜單名時才出現(xiàn)(下拉)。

一個子菜單是附加在另一個菜單(父菜單)旁邊的菜單,,靠近父菜單上某個子菜單標題,。每個子菜單標題都有一個指向右邊的箭頭。用戶可以給菜單或快捷菜單添加子菜單,。當用戶用鼠標指到父菜單上的子菜單標題時,,就會顯示出相應的子菜單。

一個快捷菜單是包含了與某個專門命令有關的一組命令的浮動菜單,。當用戶在某個對象上點擊鼠標右鍵時,,就會顯示出快捷菜單。

自定義菜單系統(tǒng)的原則

用戶可以通過很多途徑對Microsoft Office應用程序的菜單系統(tǒng)進行修改:可以創(chuàng)建新的菜單欄,、在內置或自定義菜單欄中添加新的菜單,、在內置或自定義菜單或子菜單中添加新的菜單項,而且還可以給菜單項指派宏,。另外,,用戶也可以隨時恢復到內置菜單系統(tǒng)的默認狀態(tài),。

添加自定義組件或修改內置組件

每個Microsoft Office應用程序都帶有自己的內置菜單系統(tǒng)。用戶可以修改它的內置系統(tǒng),,也可以創(chuàng)建和修改自定義的菜單組件,。

如果用戶添加或改變了較少數(shù)目的組件,那么對菜單欄,、菜單或菜單項進行修改比較合適的,。例如,如果用戶只是想提供一個訪問菜單的宏,,那么可以在內置菜單里添加進一個菜單項,,然后把宏鏈接到該菜單項。

如果用戶需要作更大范圍的修改,,最好創(chuàng)建一個新的完整組件,。例如,如果用戶想添加幾個新菜單-每個都包括幾個新的菜單項-那么創(chuàng)建一個包含所有新菜單的全新的菜單欄會比較合適一些,。

使用子菜單

如果用戶的菜單系統(tǒng)顯得擁擠而且瀏覽困難,,那么可以使用子菜單來有效地組織它們,并且通過減少每個時刻顯示給用戶的信息數(shù)量來增加Visual Basic應用程序的清晰度,。例如,,假定要創(chuàng)建一個包含了幾個選項的菜單,如下圖所示,。

可以用下面所示的任何一種方法來使用子菜單,,都能顯示出相同的菜單項。

通過使用子菜單,,可以連續(xù)地瀏覽一系列命令,,而如果使用別的方式可能只好通過一連串的對話框才能完成這些命令。但是,,如果需要創(chuàng)建較為復雜的一系列子菜單來演示一組命令,那么對話框是更好的解決辦法,。

使用快捷菜單

使用文本框,、列表框和組合框

雖然可以在Visual Basic應用程序的菜單、快捷菜單和子菜單里添加內置或自定義文本框,、列表框和組合框,,但是這類控件還是用在工具欄里比較好。在某些需要顯示或返回一種簡單設置的情況下,,使用菜單上的文本框會很方便,。在顯示菜單的同時,列表框和組合框也顯示出當前的設置,。但是,,一旦用戶在框里選擇了新值,,菜單也就隨之被關閉了(用戶不能查看或是修改設置,必須再次打開菜單來確認),。

如果要在菜單里添加內置文本框,、列表框和組合框,須使用與添加內置命令相同的技術(參考本章后面的“添加命令和命令分組”一節(jié)的內容),。如果要添加自定義文本框,、列表框和組合框,須使用和把它們添加到工具欄相同的技術(參考本章后面的“工具欄的設計時刻修改”一節(jié)的內容),。

菜單系統(tǒng)的設計時刻修改

菜單的設計時刻修改是指在應用程序運行前對菜單系統(tǒng)所進行的更改,。包括添加、刪除,、移動和恢復菜單組件,,以及設置菜單組件在運行時不隨條件更改而變化的屬性。

添加自定義菜單欄

使用“自定義”對話框

用戶需使用CommandBars集合的Add方法來創(chuàng)建一個新的菜單欄,;Add方法中的參數(shù)MenuBar決定了所創(chuàng)建的CommandBar 對象是否被顯示成菜單欄,。下面的例子創(chuàng)建了一個名叫“Custom Menu Bar”的新菜單欄。

Set cstm = CommandBars.Add(Name:="Custom Menu Bar", Position:=msoBarTop, _

MenuBar:=True, Temporary:=False)

添加菜單

用戶可以向任何內置或自定義菜單欄中添加一個菜單,。因為Microsoft Office 應用程序能夠在不同的內容中顯示不同的內置菜單欄,,所以也可以在不只一個菜單欄中添加一條相同的命令,以此保證用戶無論是在什么上下關系里都可以使用該命令,。例如,,在Microsoft Excel 中,用戶可能想給每個菜單欄添加一個專門的Accounting菜單,,于是公司里的雇員可以在任何工作表里運行相應的宏,。

在向菜單欄添加菜單時,用戶可以為該菜單指定訪問鍵,;當顯示菜單時,,訪問鍵下面加有下劃線。

注釋 雖然Microsoft Office應用程序可以在“自定義”對話框的“工具欄”表中列出包含快捷菜單的工具欄,,但是用戶既不能直接向這些工具欄添加自定義快捷菜單,,也不能從中刪除內置的快捷菜單。但是,,用戶能夠在快捷菜單上添加,、刪除或自定義菜單項。要做更多的了解,,請參考本節(jié)后面的“添加和修改快捷菜單”的內容,。

使用“自定義”對話框

“自定義”對話框為向內置或自定義菜單欄添加菜單提供了一種便利的方法。

向菜單欄添加自定義菜單

如果“自定義”對話框尚未打開,,用鼠標指到“視圖”菜單中的“工具欄”上,,然后單擊“自定義”,。
如果要進行修改的菜單欄沒有顯示出來,在“工具欄”表的“工具欄”一欄內該菜單欄名字旁邊的復選框內打上對鉤,。
在“命令”表中,,在“類別”一欄內單擊“新菜單”。
將“新菜單”一項從“命令”欄拖到菜單欄中想添加菜單的地方,。
在菜單欄中的“I”形條指出了在放開鼠標鍵時新菜單添加的位置,。

在新菜單上單擊鼠標右鍵,然后在“名字”欄中鍵入一個名字,。在為該菜單設定的作為訪問鍵的字母前面鍵入一個“&”符,。
當單擊該菜單的名字時,就顯示出一個空菜單,。要了解有關向新菜單中添加菜單項的內容,,請參看本節(jié)后面“添加命令和命令分組”的內容。

“自定義”對話框還為向內置或自定義菜單欄添加任何內置菜單的副本提供了一種快捷的方法,。用戶可以自定義副本中的命令而不會影響到原來的內置菜單,。

向菜單欄添加內置菜單的副本

如果“自定義”對話框尚未打開,將鼠標指到“視圖”菜單中的“工具欄”上,,然后單擊“自定義”,。
如果要進行修改的菜單欄沒有顯示出來,在“工具欄”表的“工具欄”一欄內該菜單欄名字旁邊的復選框打上對鉤,。
在“命令”表中,,在“類別”一欄內單擊“內置菜單”。
將“內置菜單”一項從“命令”欄拖到菜單欄中想添加菜單的地方,。
在菜單欄中的“I”形條指出了在放開鼠標鍵時新菜單添加的位置,。

技巧 用戶也可以打開包含了要被復制的菜單的菜單欄,然后按下“CTRL”,,同時將該菜單從中拖到另一個菜單欄里,,完成復制。

用戶需使用CommandBarControls集合中的Add方法來向CommandBar對象添加菜單,,該對象表示某個菜單欄,。在msoControlPopup里設置Add方法的Type參數(shù)指示所添加的控件用來顯示一個菜單。顯示菜單的控件叫做pop-up(彈出)控件,。參數(shù)Before指示新菜單在原有菜單欄諸菜單中的位置。通過Add法設置對象CommandBarPopup的Caption屬性,,用于指定菜單的名稱和訪問鍵,。以下這個Microsoft Excel的例子在工作表菜單欄的“窗口”菜單左邊添加了一個名為“Accounting”的新菜單。

Set cstmAccounting = CommandBars("Worksheet Menu Bar").Controls _

.Add(Type:=msoControlPopup, Before:=9)

cstmAccounting.Caption = "&Accounting"

注釋 用戶在新菜單的名稱里作為該菜單訪問鍵的字母前面加一個“&”符,。一旦添加好了菜單,,當用戶通過Controls(Index)引用該菜單時,,可以在菜單名中使用“&”符,也可以不用,。

添加子菜單

子菜單是附加在另一個菜單(父菜單)旁邊,,靠近某個菜單項(子菜單標題) 的菜單。用戶可以給菜單,、其他的子菜單和快捷菜單添加子菜單,。

當用戶單擊菜單欄中的菜單名顯示出該菜單的各項時,可以將鼠標指到父菜單中的子菜單標題上,,這時子菜單上的菜單項就顯示出來,。類似于首先給菜單欄添加一個空菜單(有名字但沒有菜單項)然后再添加某些菜單項,用戶也須首先給父菜單添加一個空的子菜單,,然后再添加菜單項,。

使用“自定義”對話框

使用“自定義”對話框來給另一個菜單添加子菜單。

向菜單添加子菜單

如果“自定義”對話框尚未打開,,用鼠標指到“視圖”菜單中的“工具欄”上,,然后單擊“自定義”。
如果包含要進行修改的菜單的菜單欄沒有顯示出來,,在“工具欄”表的“工具欄”一欄內該菜單欄名字旁邊的復選框內打上對鉤,。
在“命令”表中,在“類別”一欄內單擊“新菜單”,。
 

將“新菜單”一項從“命令”欄拖到菜單欄中想添加子菜單的地方,。
為了指出新子菜單的位置,把它從菜單名(如果有必要,,隨同后面的子菜單題注)上拖過,,以此來打開要添加子菜單的菜單或子菜單,再拖到它在該菜單或子菜單中所處的位置上,,然后放開鼠標左鍵,。在菜單欄中的水平的“I”形條指出了在放開鼠標左鍵時子菜單添加的位置。

在新的子菜單上單擊鼠標右鍵,,然后在“名字”欄中鍵入一個名字,。在為該子菜單設定的作為訪問鍵的字母前面鍵入一個“&”符。
當單擊該子菜單的名字時,,就顯示出一個空的子菜單,。要了解有關如何向新的子菜單中添加菜單項,請參看本節(jié)后面“添加命令和命令分組”一節(jié)的內容,。

用戶需使用CommandBarControls集合的Add方法來向CommandBar對象添加子菜單,,該對象表示另一個菜單欄。在msoControlPopup里設置Add方法的Type參數(shù)用來指定出添加的控件是一個pop-up(彈出)控件-類型和指示菜單欄中某個菜單的控件相同,。參數(shù)Before指定了新菜單在原有菜單欄諸菜單中的位置,。通過Add方法設置CommandBarPopup對象的Caption屬性,,用于指定子菜單的名稱和訪問鍵。在下面這個Microsoft Excel的例子中在工作表菜單欄的Accounting菜單底下添加了一個名為“Product”的新的子菜單,。

Set cstmAcctProduct = CommandBars("Worksheet Menu Bar").Controls("Accounting") _

.Controls.Add(Type:=msoControlPopup)

cstmAccProduct.Caption = "&Product"

注釋 用戶在新子菜單的名稱里作為該菜單訪問鍵的字母前面加一個“&”符,。一旦添加好了子菜單,當用戶通過Controls(索引)引用該子菜單時,,可以在子菜單名中使用“&”符,,也可以不用。

添加命令和命令分組

用戶可以給任何內置或自定義的菜單或子菜單添加命令,,也可以修改其外觀并且進行直觀上的邏輯分組,。本節(jié)討論如何向菜單和子菜單添加命令。下面的一節(jié)討論如何添加快捷菜單以及向快捷菜單添加菜單項這一特殊問題,。

注釋 雖然可以向菜單和子菜單添加文本框,、列表框以及組合框,但這通常不是顯示或返回信息的最好辦法,。如果要添加自定義文本框,、列表框和組合框,須使用和把它們添加到工具欄中相同的技術(參考本章后面的“工具欄的設計時刻修改”一節(jié)的內容),。

使用“自定義”對話框

“自定義”對話框提供了向菜單和子菜單添加菜單項的一種簡便的方法,。

向菜單或子菜單添加內置命令

如果“自定義”對話框尚未打開,用鼠標指到“視圖”菜單中的“工具欄”上,,然后單擊“自定義”,。
如果包含要進行修改的菜單的菜單欄沒有顯示出來,在“工具欄”表的“工具欄”一欄內該菜單欄名字旁邊的復選框打上對鉤,。
在“命令”表中,,在“類別”一欄中選擇命令的類別。
該類別的所有命令都列在“命令”一欄中,。

將命令從“命令”欄中拖到菜單或子菜單中添加該命令的位置,。
為了指出命令的位置,把該命令從菜單名(如果有必要,,隨同后面的子菜單標題)上拖過,,以此來打開要添加命令的菜單或子菜單,再拖到它在該菜單或子菜單中應處的位置上,,然后放開鼠標左鍵,。在菜單欄中的水平的“I”形條指出了在放開鼠標左鍵時命令添加的位置。

技巧 用戶也可以打開包含了要被復制的內置命令的菜單欄,,然后按下“CTRL”,,同時將該命令從中拖到另一個菜單欄里,完成復制。

用戶也可以從“自定義”對話框也提供了向內置或自定義菜單欄添加自定義命令的一種快捷方法,。但是,每種Microsoft Office應用程序都包含了不同的技術來使用“自定義”對話框完成該功能,。下面的段落介紹了這些區(qū)別,。


Microsoft Excel 按照和向菜單添加內置命令的過程相同的步驟來完成;在“類別”欄內,,單擊“宏”,,然后將“自定義菜單項”從“命令”欄拖到它在菜單中應處的位置。在新菜單項上單擊鼠標右鍵,,任何單擊“指定宏”,。在“指定宏”對話框的“宏名”一欄中,鍵入要運行的宏的名字,。

修改命令的外觀

在菜單中的任何命令都可以在該命令的名字旁邊顯示出一個圖標按鈕,。命令的“樣式”決定了是否在命令旁邊顯示出一個圖標按鈕?!白远x”對話框打開后,,使用快捷菜單上的命令來設定命令的式樣。下表描述了式樣對菜單命令的影響,。

式樣
菜單的外觀

默認式樣
圖標按鈕和名字

純文本(在菜單中)
只有名字

純文本(一般)
只有名字

圖標和文本
圖標按鈕和名字


注釋 在默認情況下,,有些內置菜單命令沒有和它們相關聯(lián)的圖標按鈕,無論設置何種式樣都不會顯示圖標,。但是,,可以給任何內置菜單命令添加圖標。

當“自定義”對話框打開后,,可以添加或修改菜單命令旁邊的圖標按鈕,。下表列出了可以使用的技術。

目 的
做 法

使用預定義的圖標按鈕 用鼠標右鍵單擊該命令,,指到“更改按鈕圖標”,,然后單擊要選擇的圖標。
復制和粘貼另一個命令的圖標 用鼠標右鍵單擊被復制的圖標所屬的命令,,然后選擇“復制按鈕圖標”,。在自定義圖標的命令上單擊鼠標右鍵,然后選擇“粘貼按鈕圖標”,。
從圖形程序復制和粘貼 在圖形程序中,,打開要復制的圖標。選擇和復制該圖標(最好是16x16象素的圖形),。切換回原應用程序,,單擊“粘貼按鈕圖標”。
編輯命令的當前按鈕圖標 在命令上單擊鼠標右鍵,然后選擇“編輯按鈕圖標”,。在“按鈕編輯器”中,,可以改變圖標的顏色和形狀,調整圖標在控件上的位置,,并且可以對修改進行預覽,。當完成對圖標的編輯后,單擊“確定”,。
用命令的原始按鈕圖標對命令進行復位 在命令上單擊鼠標右鍵,,然后選擇“復位按鈕圖標”。

命令分組

用戶可以在菜單中用線條將相關的命令分隔成組,。線條本身并不是菜單項,;而且可以在菜單中的任何一項前面設置出現(xiàn)分隔線。用戶可以在“自定義”對話框中將一條命令設為一組命令中的第一項,。

在菜單中開始一個命令組

如果“自定義”對話框尚未打開,,將鼠標指到“視圖”菜單的“工具欄”上,然后單擊“自定義”,。
如果包含要進行修改的菜單的菜單欄尚未顯示出來,,在“工具欄”表的“工具欄”一欄內該菜單欄名字旁邊的復選框打上對鉤。
在希望上方出現(xiàn)分隔線的菜單項上單擊鼠標右鍵,,然后選擇“開始一組”,。
在該項上再次單擊鼠標右鍵,在快捷菜單上的“開始一組”旁邊出現(xiàn)一個對鉤,。要去掉菜單項之前的分隔線,,可以在該項上單擊鼠標右鍵然后再次選擇“開始一組”(不再出現(xiàn)對鉤)。

用戶需使用CommandBarControls集合的Add方法來給CommandBar對象添加新的菜單項,,該對象表示某個菜單或子菜單,。要添加內置命令,可以使用Add方法的參數(shù)Id指定該命令的ID編號,。在下面這個例子在“Custom Menu Bar”菜單欄的 “Quick Tools”菜單里添加了“Spelling”命令,。

Set mySpell = CommandBars("Custom Menu Bar").Controls("Quick Tools") _

.Controls.Add(Id:=2)

要對如何確定Microsoft Office 應用程序的內置命令的ID編號做進一步了解,請參考本章后面的“菜單項和菜單欄控件ID編號”一節(jié)的內容,。

要添加一條菜單命令,,可以先添加一條新的菜單項,然后設置OnAction 屬性來指定點擊該項時運行的Visual Basic程序,。設置Add 法的參數(shù)Type為msoControlButton指出該菜單項是一條命令,。在下面這個Microsoft Excel例子里在工作表工具欄的“文件”菜單中添加了一個Open Database菜單項。當用戶點擊該菜單項時,,Microsoft Excel 運行Visual Basic程序OpenDatabaseProc,。Open Database直接出現(xiàn)在File菜單中Close命令的上面,。

Set databaseItem = CommandBars("Worksheet Menu Bar").Controls("File") _

.Controls.Add(Type:=msoControlButton, Before:=3)

With databaseItem

.Caption:="Open Database"

.OnAction:="OpenDatabaseProc"

End With

用戶可以在Visual Basic 中設置表示菜單命令的對象它的許多屬性,以此修改命令的外觀,。要做更進一步了解,,請參考“幫助”中的Style屬性和FaceID 屬性,以及CommandBarButtion對象的其他屬性和方法的幫助主題,。

設置開始一組菜單項的菜單項(也就是說,,前面有一線條的命令項),需要設置表示菜單項的CommandBarButton,、CommandBarPopup或者CommandBarComboBox對象的BeginGroup屬性為True(真)。要去除該線條,,則設置屬性BeginGroup為False(假),。使用Controls(Index) 來返回一個表示該項的對象,此處的Index是指菜單項的標題或索引號,。下面的例子在“文件”菜單的Open Database 命令(在上面的例子里添加的)前面添加了一條分隔線,。

Set databaseItem = CommandBars("Worksheet Menu Bar").Controls("File") _

.Controls("Open Database")

databaseItem.BeginGroup = True

添加和修改快捷菜單

Microsoft Excel提供事件-BeforeRightClick-可以通過修改內置快捷菜單或顯示自定義快捷菜單來響應它。

使用“自定義”對話框

用戶可以使用CommandBars集合的Add方法來創(chuàng)建新的快捷菜單,;將Add方法的參數(shù)Position設置為msoBarPopup,,以此指出所創(chuàng)建的CommandBar對象應顯示為快捷菜單。下面的例子創(chuàng)建了一個名為“Shortcuts1”的新快捷菜單,。

Set cstm = CommandBars.Add(Name:="Shortcuts1", Position:=msoBarPopup, _

MenuBar:=False, Temporary:=False)

要在任何Microsoft Office應用程序中用Visual Basic修改自定義或內置快捷菜單,,可以采用和前面章節(jié)講述的使用Visual Basic向菜單里添加子菜單或命令相同的技術。使用CommandBars(name) 返回表示該快捷菜單的一個CommandBar對象,,這里的name是指快捷菜單的名字,。于是用戶可以添加或修改任何在CommandBar對象中有效的Controls集合里的元素。

刪除菜單組件

用戶可以從菜單中刪除內置或自定義的菜單項,,可以從菜單欄中刪除內置或自定義的菜單,,還可以刪除自定義菜單欄。但是要注意,,即使可以刪除快捷菜單和內置菜單欄上的所有項,,還是不能刪除快捷菜單或內置菜單欄本身。

刪除內置菜單組件可以幫助用戶根據(jù)需要定制自己的Visual Basic應用程序,。例如,,用戶可能想從菜單中刪除某條內置命令,并且用一個自定義命令的版本來替換它,,該命令可為用戶完成特殊的任務,。用戶也可能要刪除某個菜單項以簡化界面或者降低無經(jīng)驗者選擇使用不適當命令的可能性。

注釋 用戶可以恢復已經(jīng)刪除的內置菜單欄,、菜單或菜單項,。但是,,不能恢復自定義的菜單欄、菜單或菜單項,;必須重新創(chuàng)建它們,。

使用“自定義”對話框

打開“自定義”對話框的情況下,用戶可以刪除任何菜單組件,。

刪除菜單系統(tǒng)組件

如果“自定義”對話框尚未打開,,將鼠標指到“視圖”菜單中的“工具欄”上,然后單擊“自定義”,。
如果包含要刪除的菜單組件的菜單欄尚未顯示出來,,在“工具欄”表的“工具欄”一欄內該菜單欄名字旁邊的復選框打上對鉤。
在要刪除的菜單組件上單擊鼠標右鍵,,然后在快捷菜單中選擇“刪除”,。
要刪除一個完整的自定義菜單欄,可以打開“自定義”對話框,,選中“工具欄”表內“工具欄”一欄中該菜單欄的名字,,然后單擊“刪除”按鈕。就將內置菜單欄刪除了,。

用戶可以使用Delete方法來刪除自定義菜單欄,、自定義或內置下拉菜單或子菜單以及自定義或內置菜單項。但是不能刪除內置菜單欄或快捷菜單,。

以下Microsoft Excel中的例子刪除了繪圖菜單欄里的“編輯”菜單,。

CommandBars("Chart Menu Bar").Controls("Edit").Delete

以下的例子刪除名為“Custom Menu Bar”的自定義菜單欄。

CommandBars("Custom Menu Bar").Delete

要了解如何恢復已刪除的內置菜單組件,,請參考下面一節(jié)的內容,。

恢復內置菜單組件

用戶能夠恢復已經(jīng)被刪除的內置菜單欄、菜單或菜單項,。但是,,不能恢復已經(jīng)刪除的自定義菜單欄、菜單或菜單項,;必須重建它們,。

使用“自定義”對話框

用戶可以使用“自定義”對話框來再次恢復內置菜單或子菜單中各個原始的內置菜單項。同樣地,,在恢復內置菜單欄的同時在該菜單欄中的所有菜單和子菜單也被重新恢復,。

恢復內置菜單

如果“自定義”對話框尚未打開,用鼠標指到“視圖”菜單中的“工具欄”上,,然后單擊“自定義”,。
如果包含將要被恢復的菜單的菜單欄尚未顯示出來,在“工具欄”表的“工具欄”一欄內該菜單欄名字旁邊的復選框打上對鉤,。
在要刪除的菜單或子菜單上單擊鼠標已經(jīng),,如何在快捷菜單中選擇“恢復”,。
要恢復內置菜單欄,需要打開“自定義”對話框,,選中“工具欄”表內“工具欄”一欄中該菜單欄的名字,,然后單擊“恢復”按鈕。

使用Visual Basic

使用Reset 方法恢復內置菜單欄,、菜單或子菜單組件,。

以下Microsoft Excel中的例子恢復了繪圖菜單欄中的“編輯”菜單。

CommandBars("Chart Menu Bar").Controls("Edit").Reset

菜單系統(tǒng)的運行時刻修改

用戶可以在設計時刻對創(chuàng)建的菜單系統(tǒng)進行編程,,使之在運行時能夠對條件的變化動態(tài)地作出響應,。用戶可以用自己創(chuàng)建的自定義菜單欄替換默認菜單欄。如果某個菜單項用在某種上下關系中不合適,,可以刪除,、隱藏或禁用該項以防止用戶選中它(禁用菜單項也叫做使菜單項變暗,或者變灰),。如果一個菜單項用兩種可能的狀態(tài)來表示選項,用戶可以使用命令圖標按鈕,,在按鈕被按下時表示打開選項,,按鈕被放開時表示關閉選項。最后,,用戶可能向根據(jù)當前的狀態(tài)而對菜單項進行重命名,。例如,在Microsoft Excel中,,單擊“窗口”菜單里的“凍結拆分窗口”,,它將變?yōu)椤俺蜂N窗口凍結”。

注釋 雖然既可以用“自定義”對話框也可以用Visual Basic來對菜單系統(tǒng)進行設計時刻更改,,但是卻只能用Visual Basic來進行運行時刻的更改,。

顯示自定義菜單欄

要顯示自定義菜單欄而不是活動菜單欄,用戶必須將表示該自定義菜單欄的CommandBar對象的Visible屬性設置為True(真),。(要了解如何創(chuàng)建替換活動菜單欄的菜單欄,,請參考本章前面的“添加自定義菜單欄”中的內容。)新的可見菜單欄會自動地替換活動菜單欄,。當Visual Basic應用程序運行結束時,,可以將Visible 屬性設為False(假),重新顯示默認菜單欄,。

每當用戶啟動Microsoft Office應用程序時,,都會顯示默認菜單欄。在Word里,,可以在啟動時用自定義菜單欄來替換默認菜單欄-在退出程序前保存Normal模板的時候,,最后顯示的那個菜單欄是Word再次啟動時的默認菜單欄,。用戶可以在Open事件過程中將某個菜單欄的Visible屬性設置為True(真),用它來替換默認菜單欄,。

動態(tài)地顯示菜單組件

如果一個菜單組件僅僅用于某個專門的文檔,,那么該菜單組件最好只在該文檔處于活動狀態(tài)時才顯示;這樣做減輕了界面上不必要的混亂,。用戶可以限定某個菜單組件的生命周期,,使之僅在用于文檔時才出現(xiàn)。

如果用戶想讓菜單或菜單項僅僅為特定的文檔出現(xiàn),,那么可以對Visual 屬性進行設置,,在用戶每次激活文檔時才顯示該組件,而每當文檔失活時又將該組件隱藏起來,。如果用戶想把菜單欄同特定的文檔關聯(lián)起來,,那么也可以對Visual 屬性進行設置,在用戶激活文檔時顯示菜單欄,,同時在文檔失活時隱藏菜單欄,,而不是每次都實際地添加或刪除菜單欄。

要動態(tài)地顯示菜單組件,,不但要編寫適當?shù)氖录绦騺韱⒂媒M件或顯示組件,,而且要編寫事件程序來禁用或隱藏組件。如果正在對其菜單欄進行修改的應用程序不支持事件,,那也就不能自定義動態(tài)的界面,。對于這類應用程序的解決辦法是為其他菜單項或工具欄按鈕的OnAction屬性指定類似的程序。如果應用程序支持ActiveX控件嵌入,,那么也可以修改容器應用程序的界面來對那個控件所支持的事件進行響應,。

啟用或禁用菜單組件

如果想防止用戶在某種條件下選擇某個特殊的菜單項,可以禁用該菜單項,。被禁用的命令仍然出現(xiàn)在菜單上,,但是它變得陰暗,不響應用戶的動作,。使用Enable屬性來啟用或禁用菜單項,。如果菜單項被啟用,那么Enable屬性為True(真),,如果菜單項被禁用,,Enable屬性為False(假)(但是不能設置內置菜單項的Enable屬性)。下面的這個Microsoft Excel中的例子向工作簿菜單欄的“文件”菜單中添加了Open Database命令,,如何禁用該命令,。

CommandBars("Worksheet Menu Bar").Controls("File") _

.Controls.Add("Open Database").Enabled = False

如果用戶想禁用在某個菜單中的所有命令,那么可以禁用菜單本身,。這樣可以在用戶不再訪問菜單上所有的命令時,,有效地禁用它們,。下面的這個Microsoft Excel中的例子,禁用了工作簿菜單欄上的整個“文件”菜單,。

CommandBars("Worksheet Menu Bar").Controls("File").Enabled = False

注釋 可以禁用子菜單上的所有菜單項,,但是卻不能禁用子菜單本身。

指定菜單項的狀態(tài)

如果一個菜單項表示的選項只有兩種可能的狀態(tài),,那么可以在該菜單項旁邊添加圖標按鈕,,用按鈕是否被按下來顯示選項的狀態(tài)。每次用戶單擊該菜單項時,,按鈕就變到相反的狀態(tài)-也就是打開或者關閉選項,。用戶可以通過設置菜單項的State屬性來更改其外觀。

要想弄清楚它是如何起作用的,,可以假定以下例子中的 Microsoft Excel程序被指定到工作簿菜單欄中“視圖”菜單里的自定義菜單項“Database”,,該菜單項向用戶提供了了兩種選擇,是在數(shù)據(jù)庫視圖中還是在工作簿視圖中查看工作簿,。用戶每次單擊菜單項Database,,程序就將菜單項旁邊的按鈕圖標在按下和放開之間進行切換(也就是說,程序設置State屬性,,然后切換視圖),。

Sub DatabaseView()

With CommandBars("Worksheet Menu Bar").Controls("View").Controls("Database")

If .State = msoButtonUp Then

.State = msoButtonDown

'Switch to database view

Else

.State = mosButtonUp

'Switch to worksheet view

End If

End With

End Sub

每個內置和自定義菜單項都有文本和按鈕圖標;許多內置菜單項有空白的按鈕圖標,。當使用“自定義”對話框來向菜單添加菜單項時,,可以指定和修改該項的按鈕圖標,。在運行時刻,,用戶可以設置菜單項的FaceId屬性,用來指定菜單項狀態(tài)改變時該菜單項旁邊顯示的按鈕圖標,。要指定菜單項旁邊顯示的按鈕圖標,,必須找出帶有該按鈕圖標的內置命令,判斷它的ID,,然后為FaceId屬性賦值,。(改變一個菜單項的FaceId屬性不會改變它的功能。)要對判斷內置命令ID編號作更多了解,,請參考本章后面“菜單項和工具欄控件的ID”一節(jié)的內容,。

以下Microsoft Excel中的例子,不但切換了菜單項旁邊按鈕圖標的狀態(tài),,而且還改變了圖標,。當用戶切換到數(shù)據(jù)庫視圖時,按鈕圖標被切換到grid(ID 987),。類似地,,當用戶切從數(shù)據(jù)庫視圖切換出去時,,圖標被設置為blank face(ID 1)。

Sub DatabaseView()

With CommandBars("Worksheet Menu Bar").Controls("View").Controls("Database")

If .State = msoButtonUp Then

.FaceId = 987

.State = msoButtonDown

'Switch to database view

Else

.FaceId = 1

.State = mosButtonUp

'Switch to worksheet view

End If

End With

End Sub

對菜單項進行重命名

如果用戶使用菜單項的Caption屬性去更改菜單項的名稱,,以此來響應Visual Basic代碼中條件的改變,。例如,假定用戶已經(jīng)創(chuàng)建了一個用于打開數(shù)據(jù)庫的菜單命令,。在用戶打開數(shù)據(jù)庫之后,,用戶可能會希望用關閉該數(shù)據(jù)庫的命令來替換原來的命令。下面的例子說明了作用實在上述的功能,。

CommandBars("MyMenubar").Controls("File").Controls("Open Database") _

.Caption = "Close &Database"

用這種辦法對菜單項進行重命名時,,要確保應用程序中的其他過程按照新名字來引用該菜單項(在本例中的新名字是Close Database,“關閉數(shù)據(jù)庫”),。

也可以使用代表菜單項的變量,。采用這種技術的好處之一是即使菜單項的標題改變了,變量仍然能夠繼續(xù)起作用,。下面的例子給菜單項Open Database(“打開數(shù)據(jù)庫”)設置了一個變量,。

Set openData = CommandBars("My Menubar").Controls _

("File").Controls("Open Database")

可以用下面例子中的代碼來更改標題。

openData.Caption = "Close &Database"

 

工具欄

每一個Microsoft Office應用程序都提供一個包含工具欄控件的工具欄系統(tǒng),,用戶可以借助工具欄控件頻繁地使用命令,。每個工具欄都可以定位在應用程序窗口的頂部、底部以及左邊或者右邊,,也可以作為浮動窗口放置在工作區(qū)的任何位置上,。每個工具欄控件都是一個簡單的圖形化的控件,用戶通過它和Visual Basic應用程序交換信息,。要在一個Office應用程序中顯示任何工具欄,,可將鼠標指向“視圖”菜單中的“工具欄”,然后單擊需要顯示的工具欄的名字,。要查看其他的有效工具欄,,可打開“自定義”對話框并且瀏覽在“類型”一欄中列出的多個工具欄。

工具欄控件可以分為幾種類型,;它們將在下面的段落中進行介紹,。

最常用的工具欄按鈕類型是包含一個小圖標的簡單按鈕控件。這個圖標稱為按鈕圖標,,直觀地表示出工具欄按鈕激活的命令或選項,。用戶可以單擊其中一個工具欄圖標來執(zhí)行一條命令(例如,單擊“常用”工具欄上的“新建”按鈕可以創(chuàng)建一個新文檔)或者在由一個按鈕所表示的選項的兩種可能狀態(tài)之間進行交替切換(例如,,單擊“格式”工具欄上的“加粗”按鈕,,可以交替地設定所選文本為粗體或去除所選文本的粗體)。

工具欄控件的另一種類型包含了一個小圖標和附加的下拉式調色板。用戶單擊下拉箭頭就可以顯示出調色板,,然后選擇調色板上的某個選項,。用戶單擊按鈕控件來應用當前選項。例如,,在Microsoft Excel中,,單擊字體顏色按鈕上的單擊工具欄控件的按鈕下拉箭頭就顯示出字體顏色調色板,用戶可以從中進行選擇,。

工具欄控件也可以是文本框,、列表框或組合框。用戶可以在文本框中鍵入文本或點擊下拉箭頭,,然后在列表中選擇選項,。例如,在“格式”工具欄上,,既可以在“字號”下拉列表框中點中一個選項,,

最后一種工具欄控件是pop-up(彈出)控件,它那個顯示其他控件的菜單,。在工具欄上的pop-up控件和菜單欄上菜單的名字從本質上講是一樣,。Microsoft Excel、Word或PowerPoint中“繪圖”工具欄的“繪圖”按鈕都是pop-up控件的例子,。

注釋 雖然工具欄控件和ActiveX控件有著相似的外觀和方式,,但是它們兩者是不相同的。不能向工具欄添加ActiveX控件,,也不能向文檔或窗體添加工具欄控件,。

既然理解了什么是工具欄以及工具欄控件的種類,就可以研究前面介紹的修改工具欄和工具欄控件的細節(jié),。在下面的各節(jié)中,,將討論怎樣對工具欄和工具欄控件進行設計時刻和運行時刻的更改。

自定義工具欄的原則

Microsoft Office的應用程序向用戶提供了修改內置工具欄的廣泛途徑,,使它能更好地為用戶服務,。用戶可以創(chuàng)建新的工具欄,;向內置或自定義工具欄添加新的工具欄按鈕,;修改工具欄按鈕上的圖標;以及為工具欄按鈕指定宏,、“工具提示”文本和狀態(tài)欄文本,。

是修改內置工具欄還是創(chuàng)建新的工具欄取決于要進行更改的程度。如果僅添加或修改幾個工具欄按鈕,,那么修改內置工具欄是有意義的,;如果想提供的對命令的分類與現(xiàn)有的任何內置工具欄完全不同,或者要用一些自定義工具欄按鈕來作為特別組,,那么創(chuàng)建新的工具欄會更方便一些,。無論所做的改變有多大,,只要愿意,都可以把內置菜單系統(tǒng)恢復到默認的狀態(tài),。

除了上述通常在設計時刻所做的變化之外,,還可以使用Visual Basic程序,通過改變工具欄和工具欄按鈕的屬性,,來對應用程序運行時用戶的輸入作出響應(也就是說,,在運行時刻)。例如,,當用戶不再需要某個工具欄時,,可以把它隱藏起來,也可以移動它或改變它的大小使它不再擋路,,還可以禁用某個工具欄按鈕以防用戶在不適當?shù)臅r刻點中它,,以及在用戶每次點中工具欄按鈕時讓工具欄按鈕在按下和放開之間切換。

使用菜單

可以把pop-up(彈出)控件-和顯示菜單欄中的菜單以及菜單中的子菜單相同的控件-添加到任何內置或自定義工具欄中,。通常,,向工具欄添加菜單是在自定義內置菜單欄(不會象添加工具欄控件那么方便)和添加大量工具欄控件之間一種有益的折衷方案。在Microsoft Excel,、Word或PowerPoint中,,“繪圖”工具欄上的“繪圖”按鈕就是工具欄帶菜單的例子。

向工具欄添加菜單,、子菜單和菜單項,,采取的步驟和將這些組件添加到菜單欄所采取的步驟相同,在本章“菜單的設計時刻修改”一節(jié)作過介紹,。

使用文本框,、列表框和組合框

在Microsoft Office應用程序中,可以向內置和自定義工具欄添加文本框,、列表框和組合框,。這些控件是很有處的,可以從用戶那里頻繁取得信息,,也可以運行復雜的程序,,程序根據(jù)控件的值在可能的結果范圍內進行判斷。

“自定義”對話框支持向任何工具欄添加內置文本框,、列表框和組合框,,但是不支持添加自定義的文本框、列表框和組合框,;作為替代,,必須使用Visual Basic來添加和設計這些控件。打開“自定義”對話框,可以更改任一內置或自定義文本框,、列表框或組合框的寬度,。

 

對工具欄的設計時刻修改

設計時刻修改包括創(chuàng)建新的工具欄;向工具欄中添加新的或內置的工具欄控件,;從工具欄中刪除工具欄控件,;對工具欄控件進行分組或取消分組;以及改變文本框,、列表框和組合框工具欄控件的寬度,。用戶還可以選擇一個新的圖標,或使用“按鈕編輯器”來自定義一個圖標,,用來于某個特殊的工具欄相關聯(lián),。

添加自定義工具欄

在許多情況下,用戶可以通過向內置工具欄添加工具欄控件的方法實現(xiàn)一個完整的命令集合,。但是如果想要以一種便于使用的形式來表示一個完整的命令集合,,而和所有的內置命令完全不同,可以創(chuàng)建一個新的工具欄,。通過“自定義”對話框或Visual Basic都能實現(xiàn)這一點,。

使用“自定義”對話框

“自定義”對話框提供了添加自定義工具欄的一種便利的途徑。

添加工具欄

如果“自定義”對話框尚未打開,,用鼠標指到“視圖”菜單中的“工具欄”上,,然后單擊“自定義”。
在“工具欄”表中,,單擊“新建”,。
在“工具欄名稱”一欄中,鍵入新工具欄的名字,,然后單擊“確定”,。
顯示出一個有著該名字的浮動的空工具欄。

新工具欄被添加到“工具欄”表中的“工具欄”一欄中,。

使用CommandBars集合的Add法來創(chuàng)建新的工具欄,,設置Add方法的參數(shù)Position為msoBarLeft, msoBarTop, msoBarRight, msoBarBottom, 或 msoBarFloating,它們指定創(chuàng)建的CommandBar對象一個浮動工具欄還是固定位置的工具欄,。下面的例子創(chuàng)建并顯示了一個新的名叫“Custom Tools”的工具欄,。

Set cstm = CommandBars.Add(Name:="Custom Tools", Position:=msoBarFloating, _

MenuBar:=False, Temporary:=False)

cstm.Visible = True

添加控件和控件分組

可以向任何內置或自定義工具欄添加控件,也可以直觀地(用分隔線)把它們分成邏輯組,。

使用“自定義”對話框

“自定義”對話框提供了向工具欄添加控件的一種簡單的途徑,。

向工具欄添加內置控件

如果“自定義”對話框尚未打開,,那么用鼠標指到“視圖”菜單的“工具欄”上,,然后單擊“自定義”。
如果要作修改的工具欄尚未顯示出來,那么在“工具欄”表的“工具欄”一欄內該工具欄名字旁邊的復選框內打上鉤,。
在“命令”表中,,在“類別”一欄中選中一種命令的類別。
所選類別的命令現(xiàn)在都列在“命令”一欄中,。

將控件從“命令”欄中拖到菜單上要添加該控件的位置,,然后放開鼠標。
在工具欄上的豎直“I”行條指出放開鼠標后控件添加的位置,。

技巧 用戶也可以打開包含了要被復制的控件的工具欄,,然后按下“CTRL”,同時將該控件從中拖到另一個菜單欄里,,完成復制,。

“自定義”對話框也提供了向內置或自定義工具欄添加自定義命令的一條快捷的途徑。但是,,每個Microsoft Office應用程序都在使用“自定義”對話框實現(xiàn)該功能時采用了不同的技術,。以下的段落介紹了這些區(qū)別。

Microsoft Excel 按照和向工具欄添加內置控件相同的步驟來完成,;在“類別”欄內,,單擊“宏”,然后將“自定義按鈕” 控件拖到工具欄中希望它出現(xiàn)的位置上,。在新控件上單擊鼠標右鍵,,然后點擊“指定宏”。在“指定宏”對話框中,,選擇要運行的宏,。使用快捷菜單上的命令來改變控件的圖標。

修改工具欄按鈕的外觀

按鈕在工具欄上的外觀既可以只是按鈕圖標,,也可以只是按鈕名稱,,或者是在名稱旁邊同時顯示按鈕圖標。按鈕的“樣式”決定了按鈕是帶圖標,、還是只有名稱或者既有圖標又有名稱,。“自定義”對話框打開后,,使用快捷菜單上的命令來設定按鈕的式樣,。下表描述了式樣對工具欄按鈕的影響。

式 樣
按 鈕 的 外 觀

默認式樣 只有圖標按鈕
純文本(在菜單中) 只有按鈕圖標
純文本(一般) 只有名字
圖標和文本 圖標按鈕和名字

當打開“自定義”對話框時,,可以給工具欄按鈕添加或修改圖標,。下表列出了可以使用的技術。

目 的
做 法

使用預定義的圖標 用鼠標右鍵單擊該按鈕,,指到“更改按鈕圖標”,,然后單擊要選擇的圖標,。
復制和粘貼另一個按鈕的圖標 用鼠標右鍵單擊被復制的圖標所屬的按鈕,然后選擇“復制按鈕圖標”,。在自定義圖標的按鈕上單擊鼠標右鍵,,然后選擇“粘貼按鈕圖標”。
從圖形程序復制和粘貼 在圖形程序中,,打開要復制的圖標,。選擇和復制該圖標(最好是16x16象素的圖形)。切換回原應用程序,,單擊“粘貼按鈕圖標”,。
編輯按鈕的當前圖標 在按鈕上單擊鼠標右鍵,然后選擇“編輯按鈕圖標”,。在“按鈕編輯器”中,,可以改變圖標的顏色和形狀,調整圖標在控件上的位置,,并且可以對修改進行預覽,。當完成對圖標的編輯后,單擊“確定”,。
用按鈕的原始圖標對命令進行復位 在按鈕上單擊鼠標右鍵,,然后選擇“復位按鈕圖標”。

可以使用分隔線按相關性對控件分組,。分隔線本身不是控件,;更確切地說,可以在工具欄的每個控件前都設置一條分隔線,??梢允褂谩白远x”對話框設置某條命令是一組控件中的第一個控件。

在工具欄上開始一組按鈕

如果“自定義”對話框尚未打開,,那么用鼠標指到“視圖”菜單中的“工具欄”上,,然后單擊“自定義”。
如果包含要進行修改的控件的工具欄尚未出現(xiàn),,那么在“工具欄”表的“工具欄”一欄內該工具欄名字旁邊的復選框內打上鉤,。
在希望上方出現(xiàn)分隔線的控件上單擊鼠標右鍵,任何選擇“開始一組”,。
再次在該控件上單擊鼠標右鍵,,在快捷菜單上的“開始一組”旁邊顯示出一個對鉤。要去除在控件之前的分隔線,,可以在該控件上單擊鼠標右鍵然后再次選擇“開始一組”(不再出現(xiàn)對鉤),。

可以使用CommandBarControls集合的Add方法來向CommandBar對象添加新的控件,該對象表示某個特定的工具欄,。要添加內置控件,,可以用Add方法的參數(shù)Id指示該命令的ID編號,。在下面這個例子在“Quick Tools”工具欄里添加了控件“Spelling”。

Set mySpell = CommandBars("Quick Tools").Controls.Add(Id:=2)

要對如何決定Microsoft Office 應用程序的內置命令的ID編號做更多的了解,,請參考本章后面的“菜單項和菜單欄控件ID編號”一節(jié)的內容,。

要添加自定義控件,,可以先添加新的控件,,然后設置OnAction 屬性來指定點擊該控件時運行的Visual Basic程序。設置Add 法的參數(shù)Type為msoControlButton指出該控件是一個按鈕,。設置該控件的FaceId值為一個內置控件的ID,,用以復制該內置控件的外觀。在下面這個Microsoft Excel例子里,,在常用工具欄的“保存”按鈕前添加了一個按鈕,。當用戶點擊該菜單項時,Microsoft Excel 運行Visual Basic程序OpenDatabaseProc,。這個,;例子還設置按鈕上的圖標是grid(ID 987)。

Set databaseItem = CommandBars("Standard").Controls. _

Add(Type:=msoControlButton, Before:=3)

With databaseItem

.OnAction:="OpenDatabaseProc"

.FaceId = 987

End With

用戶可以在Visual Basic 中設置表示工具欄按鈕的對象它的許多屬性,,以此修改控件的外觀,。要作更多的了解,請參考“幫助”中的Style屬性和FaceID 屬性,,以及CommandBarButtion對象的其他屬性和方法的幫助主題,。

設置開始一組控件的控件(也就是說,前面有一線條的控件),,需要設置表示控件的CommandBarButton,、CommandBarPopup或者CommandBarComboBox對象的BeginGroup屬性為True(真)。要去除該線條,,則設置屬性BeginGroup為False(假),。使用Controls(Index),此處的索引是指控件的標題或索引號,,來返回一個表示該控件的對象,。。

添加和初始化文本框,、列表框和組合框控件

可以通過“自定義”對話框添加內置文本框,、列表框和組合框控件。步驟和本節(jié)前面介紹的添加內置控件的步驟相同,。

添 加 控 件
指 定 類 型

文本框 msoControlEdit
列表框 msoControlDropDown
組合框 msoControlComboBox

可以使用文本框,、列表框或組合框的Style屬性指明在該框的左邊是否顯示控件的標題。

下面的例子向自定義工具欄添加了一個標為“Quarter”的組合框,,并且給該組合框指定了一個名為“ScrollToQuarter”的宏,。

Set newCombo = CommandBars("Custom1").Controls _

.Add(Type:=msoControlComboBox)

With newCombo

.AddItem "Q1"

.AddItem "Q2"

.AddItem "Q3"

.AddItem "Q4"

.Style = msoComboNormal

.OnAction = "ScrollToQuarter"

End With

當用戶的vba應用程序運行時,,在用戶每次改變組合框控件時都要調用指定到該控件的OnAction屬性中的過程。在該過程中,,可以使用CommandBars對象的ActionControl屬性來發(fā)現(xiàn)被更改的控件并且返回被更改的值,。ListIndex屬性返回輸入到組合框中的內容。

刪除工具欄控件

刪除內置工具欄控件能夠幫助用戶定制自己的vba應用程序以滿足需要,。例如,,要從刪除工具欄中刪除一個內置控件并且用該命令的自定義版本來替換它,新版本將執(zhí)行用戶的專門任務,。抑或是要刪除某個控件以簡化界面或減少沒有經(jīng)驗用戶選用不希望使用的那些命令的可能性,。

注釋 可以恢復已經(jīng)被刪除的內置工具欄或工具欄控件。但是,,不能恢復已經(jīng)被刪除的自定義工具欄或工具欄控件,;必須重新創(chuàng)建它們。

使用“自定義”對話框

在“自定義”對話框打開的情況下,,可以刪除任何工具欄控件,。

刪除工具欄控件

如果“自定義”對話框尚未打開,用鼠標指到“視圖”菜單中的“工具欄”上,,然后單擊“自定義”,。
如果包含要刪除的工具欄控件的工具欄尚未顯示出來,在“工具欄”表的“工具欄”一欄內該工具欄名字旁邊的復選框打上對鉤,。
在要刪除的控件上單擊鼠標右鍵,,然后在快捷菜單中單擊“刪除”。
要刪除一個完整的自定義工具欄,,可以打開“自定義”對話框,,在“工具欄”表中的“工具欄”一欄內,選中該工具欄的名字,,然后單擊“刪除”按鈕,。但是不能刪除內置工具欄。


可以使用Delete方法來刪除自定義工具欄以及自定義或內置的工具欄控件,。但不能刪除內置工具欄,。

以下Microsoft Excel中的例子從“常用”工具欄中刪除了“打印”控件。

CommandBars("Standard").Controls("Print").Delete

下面的例子刪除了名叫“Custom Bar”的自定義工具欄

CommandBars("Custom Bar").Delete

用戶也可以恢復已經(jīng)刪除的內置工具欄控件,。要做更多了解,,請參考下一節(jié)的內容。

恢復內置工具欄控件

用戶可以恢復已經(jīng)刪除的內置工具欄控件,。但是,,不能恢復已經(jīng)被刪除的自定義工具欄或工具欄控件;必須重新創(chuàng)建它們,。

使用“自定義”對話框

用戶可以使用“自定義”對話框來恢復內置工具欄中的內置控件集合,。

恢復內置工具欄

如果“自定義”對話框尚未打開,,則用鼠指向“視圖”菜單中的“工具欄”一項,然后單擊“自定義”,。
在“工具欄”表上,,選擇要恢復的內置工具欄。
單擊“恢復”,。
使用Visual Basic

可以使用Reset方法來恢復內置工具欄的組件,。

以下Microsoft Excel中的例子恢復了“常用”工具欄的默認控件集合。

CommandBars("Standard").Reset

 

對工具欄的運行時刻修改

用戶可以對在設計時刻創(chuàng)建的工具欄進行編程,,使其那個在運行時對條件的變化作出動態(tài)響應,。如果一個特殊的控件在某個場合下不是合適的選擇,,那么抑或可以刪除或者禁用該控件以防止用戶點中它,。如果一個控件有兩種狀態(tài)來表示選項,用戶可以采用在控件被按下時表示打開選項,,控件被放開時表示關閉選項,。

注釋 雖然既可以使用“自定義”對話框也可以使用Visual Basic對工具欄進行設計時刻修改,但是必須使用Visual Basic來進行任何運行時刻修改,。

顯示或隱藏工具欄和工具欄控件

工具欄在屏幕上所占用的空間也可以以其他方式用來顯示日期,;用戶可以在必要的時候顯示工具欄而在不再需要它的時候把它隱藏起來。工具欄在它的Visual 屬性為True(真)時是可見的,,而在該屬性為False(假)時是不可見的,。設置該屬性為True(真)就等價于,在“工具欄”對話框中的“工具欄”表里該工具欄名字旁邊的復選框內打上對鉤,,然后單擊“確定”,。

下面的Microsoft Excel的過程指定給“視圖”菜單中的菜單項View MyToolbar,用戶每次點擊該菜單項,,就使該過程在菜單項和工具欄Visible屬性的兩種狀態(tài)之間進行切換,。當工具欄重新出現(xiàn)時,它所處的位置就是它隱藏不可見時的位置,。

Sub ViewMyAppToolbar()

With CommandBars("Worksheet Menu Bar").Controls("View").Controls("View MyToolbar")

If .State = msoButtonUp Then

.State = msoButtonDown

CommandBars("MyAppTools").Visible = True

Else

.State = msoButtonUp

CommandBars("MyAppTools").Visible = False

End If

End With

End Sub

當工具欄可見時,,用戶可以單擊上面的任何控件,運行給控件指定的過程,。

如果想要一個特定的工具欄只在某種條件存在時才出現(xiàn),,那么可以在運行時刻隱藏或顯示工具欄控件。通過設置Visible屬性為True(真)或False(假),,能夠有效地向用戶工作區(qū)添加控件,,或者從用戶工作區(qū)中去掉控件而不必真正地刪除該控件。

注釋 因為Word可以在文檔和模板中保存自定義信息,,那么當文檔或模板有效時,,就會顯示出自定義工具欄和工具欄控件,,而當文檔或模板無效時,又會把它們隱藏起來,。與此相對照,,因為Microsoft Excel在工作簿級保存自定義信息,又會需要在事件代碼中使用Visible屬性來動態(tài)地更改界面,。

移動工具欄及調整工具欄的大小

用戶可能希望在自己的應用程序運行時能夠隨著條件的改變來調整屏幕上工具欄的突出性,。這可以通過改變工具欄的大小或位置來做到。用戶可以使用工具欄所支持的幾種屬性來對其進行調整,;將它們定位在應用程序窗口的底部,、底部、左邊或者右邊,;或者將它們放在屏幕的隨便什么位置(如果它們是浮動工具欄的話),。要對表示工具欄的CommandBar對象的屬性和方法作更多的了解,請參考“幫助”中的“CommandBar 對象”,,使用標題上的跳轉來顯示屬性和方法的列表,。

恢復內置工具欄

如果一個默認工具欄已經(jīng)被修改了-被用戶或Vba過程-用戶能夠通過Reset方法將工具欄恢復到它的默認狀態(tài)。使用該方法等價于,,在“自定義”對話框中的“工具欄”一欄里選中被自定義的內制工具欄的名字,,然后單擊“確定”。

下面的例子將所有工具欄恢復到它們的默認狀態(tài),,同時刪除所了所有的自定義工具欄,。

For Each cb In CommandBars

If cb.BuiltIn Then

cb.Reset

Else

cb.Delete

End If

Next

當心 當使用Reset方法時要小心;它不但能夠恢復任何被刪除的內置工具欄控件,,而且還會刪除任何添加的自定義工具欄控件,。要牢牢記住,另一個宏可能已經(jīng)向工具欄添加了自定義工具欄,,復位工具欄也會刪除這些控件,。為了避免這些問題,應該一個一個地刪除應用程序所添加的工具欄控件,,而不要復位整個工具欄,。

啟用或禁用工具欄控件

用戶可能想在自己的應用程序運行時控制某個工具欄控件的可用性,以此來防止在不合適的時刻點中該按鈕,。要做到這一點,,可以動態(tài)地啟用或禁用工具欄控件。當工具欄被禁用時,,點中它不會有什么反應,,也不會運行和它關聯(lián)的過程。使用Enable屬性來設置或返回工具欄控件的狀態(tài)(被啟用或被禁用)。

下面的例子禁用了“常用”工具欄中的第三個按鈕,。

CommandBars("Standard").Controls(3).Enabled = False

指出工具欄控件的狀態(tài)

如果一個工具欄按鈕表示有著兩種狀態(tài)的一個選項,,可以通過改變按鈕的外觀來指出當前選項的狀態(tài);當選項打開時,,與之相關聯(lián)的按鈕顯示出被按下的狀態(tài),;當選項關閉時,按鈕顯示被放開的狀態(tài),。

如果工具欄按鈕顯示出被按下的狀態(tài),,工具欄按鈕的State屬性值為msoButtonDown;而如果工具欄按鈕顯示出被放開的狀態(tài),,該屬性值為msoButtonUp,。下面的過程被指定給新的工具欄控件Database View,在對工作簿的特殊查看間進行切換之前,,它能夠改變該控件的外觀,。

Sub DatabaseView()

With CommandBars("MyAppToolbar").Controls(3)

If .State = msoButtonDown Then

.State = msoButtonUp

'Switch to database view

Else

.State = msoButtonDown

'Switch to worksheet view

End If

End With

End Sub

修改文本框、列表框和組合框控件

如果給工具欄添加了文本框,、列表框或組合框控件,,那么可以進行運行時刻更改,,比如改變控件中文本框部分的當前值,、向控件的列表框中添加或從中刪除項(只適用于列表框和組合框)。

用戶能夠通過設置文本框,、列表框或組合框控件的Text屬性,,來反映自己的Visual Basic應用程序的狀態(tài)。例如,,如果單擊一個工具欄按鈕來運行名為“MaxZoom”的過程(一個自定義過程,,能夠以最大顯示比例顯示活動文檔),組合框控件的文本框部分能夠更加精確地調整顯示比例,,并且顯示出比例值,,該比例值能夠被設置到最大值。

使用AddItem和RemoveItem方法來向列表框或組合框控件中的列表部分添加以及從中刪除項(通過索引編號),。例如,,如果在Word里創(chuàng)建了一個列表框,它遵循用戶在一個時段內所使用的樣式,,用戶可以在每次使用一種樣式時向控件的列表部分添加一種樣式的名稱,。

注釋 在列表框或組合框控件里添加項或從中刪除項時要小心;這將導致所有項的索引編號發(fā)生移動,。

用戶可以使用列表框和組合框的其他屬性和方法來改變運行時刻一個控件的外觀,。例如,可以為控件添加和調整標題列表(標題列表是位于一個控件列表部分頂部的列表項組,用分隔線把該組同其他列表項分隔開),。要更進一步了解文本框,、列表框和組合框控件的使用,請參考“幫助”中“使用命令欄”的內容,。

 

菜單項和工具欄控件的IDs

每個內置菜單欄和工具欄控件相關聯(lián)的功能都屬于某個特定的Office應用程序,,與此相反的是,每個菜單項和工具欄控件的標題,、按鈕圖標,、寬度以及其他默認屬性都保存在能夠被所有應用程序共享的資源中??梢允褂肐D編號從該資源中找出特定的菜單項和工具欄控件,。

注釋 該資源還包含pop-up(彈出)控件的默認屬性,該控件用來顯示內置菜單,。但是,,那些pop-up(彈出)控件并不包含菜單中的內置菜單項;也就是說,,pop-up(彈出)是空的,。

雖然一般可以忽略一個菜單項或控件的ID,而是使用“自定義”對話框來更改內置或自定義菜單和工具欄,,但是仍然需要參考某項的ID來完成對用戶自定義界面的某些更改,。以下是需要參考ID的以下場合。

要給一個內置或自定義菜單或工具欄指派一項,,但是在設計時刻該項在“自定義”對話框中并不存在,。
在運行時刻向一個菜單欄或工具欄添加內置項。
在運行時刻將一個特定的按鈕圖標復制到另一個按鈕,。
可以為CommandBarControls 集合的Add方法中的參數(shù)Id指定一個內置項ID,,并且可以為任何自定義或內置控件的FaceId 屬性指定一個項ID。
注釋 即使共享資源包含了所有Office應用程序中的每個菜單項和工具欄控件的有關信息,,用戶所添加的項和控件,,它們的功能必須包含在用戶正在使用的應用程序里面。例如,,不能向Word中一個工具欄添加Microsoft Excel 的“刪除行”工具欄按鈕(ID 293),。但是,可以把“刪除行”工具欄按鈕的外觀從Microsoft Excel 復制到Word里給一個工具欄控件,。

可以使用以下方法之一,,來得到一個特定Office應用程序中內置菜單項和工具欄控件的ID編號。

在一個模塊中,,編寫代碼把一個已經(jīng)存在于菜單或工具欄中的菜單項或工具欄控件賦值給一個對象變量,,然后使用調試工具監(jiān)測該對象Id屬性的值。得到ID后,可以采用Add方法向另一個菜單或工具欄添加該菜單項或控件的副本,,也可以通過把ID賦給另一個按鈕的FaceId 屬性來復制圖標給另一個按鈕,。

Run the following procedure in one of the Office applications to create a text document that lists the IDs and captions of all the built-in commands in that application.

在一個Office應用程序中運行以下過程,創(chuàng)建一個列出該應用程序中所有內置命令的ID和標題的文本文檔,。

Sub outputIDs()

Const maxId = 4000

Open "c:\ids.txt" For Output As #1

' Create a temporary command bar with every

' available item and control assigned to it.

Set cbr = CommandBars.Add("Temporary", msoBarTop, False, True)

For i = 1 To maxId

On Error Resume Next

cbr.Controls.Add Id:=i

Next

On Error GoTo 0

' Write the ID and caption of each control to the output file.

For Each btn In cbr.Controls

Write #1, btn.Id, btn.Caption

Next

' Delete the command bar and close the output file.

cbr.Delete

Close #1

End Sub

在一個Office應用程序中運行以下過程,,創(chuàng)建一個自定義工具欄的集合,該集合包含了和Office里FaceId屬性的有效值數(shù)目同樣多的按鈕,;每個按鈕的圖標和工具提示文本被設置為其中的一個值,。可以對內置命令(見前面的過程)的ID編號和這些工具欄上某個按鈕的FaceId屬性值進行交叉索引,,反之亦然,。

Sub MakeAllFaceIds()

'Make fourteen toolbars with 300 faces each.

'Note that maxId is greater than last valid ID, so

'error will occur when first invalid ID is used.

Const maxId = 3900

On Error GoTo realMax

For bars = 0 To 13

firstId = bars * 300

lastId = firstId + 299

Set tb = CommandBars.Add

For i = firstId To lastId

Set btn = tb.Controls.Add

btn.FaceId = i

btn.TooltipText = "FaceId = " & i

Next

tb.Name = ("Faces " & CStr(firstId) & " to " _

& CStr(lastId))

tb.Width = 591

tb.Visible = True

Next

'Delete the button that caused the error and set toolbar name

realMax:

btn.Delete

tb.Name = ("Faces " & CStr(firstId) & " to " _

& CStr(i - 1))

tb.Width = 591

tb.Visible = True

End Sub

注釋 內置菜單pop-up(彈出)控件的ID編號在30002到30426之間。記住,,這些ID編號返回的內置菜單副本為空,。

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多