對 Microsoft Office 命令欄進行更多編程(2)
2024-07-21 02:23:55
供稿:網友
可以使用如下所示的代碼測試該函數:
public sub testaddcomboboxtocommandbar()
' 用途:測試 addcomboboxtocommandbar 函數。
dim strchoices(4) as string
strchoices(1) = "vanilla"
strchoices(2) = "chocolate"
strchoices(3) = "strawberry"
strchoices(4) = "other"
if addcomboboxtocommandbar("tools", "favorite ice cream", _
strchoices) = true then
msgbox "組合框已成功添加。"
else
msgbox "未能添加組合框。"
end if
end sub
禁用和隱藏命令欄與命令欄控件
開發 office 解決方案時,您可能需要防止用戶在與該解決方案關聯的某些命令欄和命令欄控件上單擊。例如,您可能需要防止用戶單擊“窗體”工具欄上的任何控件,以免修改您在 microsoft word 中創建的自定義窗體。您也可能需要為給定的解決方案禁用“工具”菜單上的“宏”命令。
將命令欄或命令欄控件的 enabled 屬性設置為 false 可禁用命令欄或命令欄控件;同樣,將命令欄或命令欄控件的 enabled 屬性設置為 true 可啟用命令欄或命令欄控件。
將命令欄或命令欄控件的 visible 屬性設置為 false 可隱藏命令欄或命令欄控件;同樣,將命令欄或命令欄控件的 visible 屬性設置為 true 可顯示命令欄或命令欄控件。
要嘗試此操作,請將以下代碼行輸入到“立即”窗口。每個代碼行將切換指定的命令欄或命令欄控件的啟用或可見狀態。如果在 outlook 或 microsoft visual basic® editor 中輸入此代碼,請務必使用 application.activeexplorer 或 application.vbe 術語。要返回到開始時的啟用或可見狀態,請確保將每行運行兩次。
application.commandbars("tools").enabled = _
not application.commandbars("tools").enabled
application.commandbars("tools").controls("macro").enabled = _
not application.commandbars("tools").controls("macro").enabled
application.commandbars("tools").controls("macro").visible = _
not application.commandbars("tools").controls("macro").visible
定位命令欄
命令欄的 position 屬性指定命令欄在應用程序中的位置。msobarleft、msobartop、msobarright 和 msobarbottom 枚舉常數指定在應用程序的左邊、上邊、右邊或下邊顯示命令欄。msobarfloating 枚舉常數指定命令欄不靠接到應用程序的邊緣。msobarpopup 枚舉常數指定命令欄是彈出菜單。
以下函數更改所指定的命令欄的位置。
public function changecommandbarposition(byval strcommandbarname as string, _
byval msoposition as msobarposition) as boolean
' 用途:更改命令欄的位置。
' 接受:
' strcommandbarname:要更改位置的命令欄名稱。
' 返回:如果命令欄移動成功,則為 ture。
on error goto changecommandbarposition_err
' 將下一行代碼替換為:
' application.activeexplorer.commandbars.item(strcommandbarname).position = _
msoposition <- 對于 outlook
' application.vbe.commandbars.item(strcommandbarname).position = _
msoposition <- 對于 visual basic editor
application.commandbars.item(strcommandbarname).position = msoposition
changecommandbarposition_end:
changecommandbarposition = true
exit function
changecommandbarposition_err:
changecommandbarposition = false
end function
可以使用如下所示的代碼測試該函數:
public sub testchangecommandbarposition()
' 用途:測試 changecommandbarposition 函數。
if changecommandbarposition("standard", msobarfloating) = true then
msgbox "命令欄已成功移動。"
else
msgbox "未能移動命令欄。某些命令欄無法" & _
"以某些方式移動。"
end if
end sub
動態添加和刪除命令欄
有時需要將命令欄與特定 office 文檔關聯在一起。例如,您需要在特定 office 文檔打開時才顯示某些自定義命令欄,并在特定 office 文檔關閉時將其隱藏。要以編程方式執行此操作,使用 excel 就是一個不錯的示例。要測試該操作,請創建一個新的空白工作簿,然后將 sheet1 重命名為 commandbarinfo。將以下信息鍵入 commandbarinfo 工作簿中:
圖 4:在 excel 中動態創建命令欄的信息
在 visual basic editor 中,將以下代碼添加到與新空白工作簿關聯的新代碼模塊中:
public function createcommandbarpopup() as boolean
' 用途:根據 excel 工作表中提供的信息,
' 創建一個包含菜單項的命令欄彈出控件。
' 返回:如果命令欄彈出控件
' 成功添加,則為 true。
dim objworksheet as excel.worksheet
dim objcommandbarcontrol as office.commandbarcontrol
dim objcommandbarpopup as office.commandbarpopup
dim objcommandbarbutton as office.commandbarbutton
dim introw as integer
on error goto createcommandbarpopup_err
' 必須將包含命令欄信息的工作表
' 命名為“commandbarinfo”。
set objworksheet = thisworkbook.sheets("commandbarinfo")
' 從以前的版本中刪除該控件的
' 所有現有實例。
for each objcommandbarcontrol in application.commandbars.item("standard").controls
if objcommandbarcontrol.caption = objworksheet.cells(1, 1) then
objcommandbarcontrol.delete
end if
next objcommandbarcontrol
set objcommandbarpopup = _
application.commandbars.item("standard").controls.add(msocontrolpopup)
objcommandbarpopup.caption = objworksheet.cells(1, 1)
introw = 3
' 一直添加按鈕,直到標題用盡為止。
do until objworksheet.cells(introw, 1) = ""
with objcommandbarpopup
set objcommandbarbutton = .controls.add(msocontrolbutton)
with objcommandbarbutton
.caption = objworksheet.cells(introw, 1)
.onaction = objworksheet.cells(introw, 2)
end with
end with
introw = introw + 1
loop
createcommandbarpopup_end:
createcommandbarpopup = true
exit function
createcommandbarpopup_err:
createcommandbarpopup = false
end function
public function deletecommandbarpopup() as boolean
' 用途:根據 excel 工作表中提供的信息,
' 刪除命令欄彈出控件。
' 返回:如果命令欄彈出控件被
' 成功刪除,則為 true。
dim objworksheet as excel.worksheet
dim objcommandbarcontrol as office.commandbarcontrol
on error goto deletecommandbarpopup_err
' 必須將包含命令欄信息的工作表
' 命名為“commandbarinfo”。
set objworksheet = thisworkbook.sheets("commandbarinfo")
' 刪除該控件的所有現有實例。
for each objcommandbarcontrol in application.commandbars.item("standard").controls
if objcommandbarcontrol.caption = objworksheet.cells(1, 1) then
objcommandbarcontrol.delete
end if
next objcommandbarcontrol
deletecommandbarpopup_end:
deletecommandbarpopup = true
exit function
deletecommandbarpopup_err:
deletecommandbarpopup = false
end function
public sub testmacro()
' 用途:提供一個完整性測試宏。
msgbox "這是測試宏。"
end sub
將以下代碼添加到新空白工作簿的 thisworkbook 模塊中:
private sub workbook_open()
if createcommandbarpopup = false then
msgbox "未能正確添加彈出菜單。"
else
msgbox "彈出菜單已成功添加。"
end if
end sub
private sub workbook_beforeclose(cancel as boolean)
if deletecommandbarpopup = false then
msgbox "未能正確刪除彈出菜單。"
else
msgbox "彈出菜單已成功刪除。"
end if
end sub
保存并關閉工作簿,然后重新打開該工作簿。請注意,“家務”彈出菜單已添加到“標準”工具欄中。還應注意,在關閉此工作簿時,“家務”彈出菜單將消失。
有關該技術的更詳細版本,請參閱 excel 資深專家 (mvp) john walkenbach 提供的解決方案,網址為 http://j-walk.com/ss/excel/tips/tip53.htm(英文)。