Excel2007中老式工具欄的限制
如果想在Excel 2007中創(chuàng)建一個(gè)工具欄,應(yīng)注意下面的一些限制:
不能夠自由浮動(dòng)
總是顯示在加載項(xiàng)選項(xiàng)卡自定義工具欄組中
Excel會(huì)忽略一些CommandBar的屬性和方法
創(chuàng)建工具欄的代碼
這里的代碼假定有一個(gè)帶有兩個(gè)名為Macro1和Macro2宏的工作簿,并且在該工作簿打開(kāi)時(shí)創(chuàng)建這個(gè)工具欄,在關(guān)閉該工作簿時(shí)刪除這個(gè)工具欄。
注意,與Ribbon定制不同,不管當(dāng)前是哪個(gè)工作簿,自定義工具欄者是可見(jiàn)的。
在ThisWorkbook代碼模塊中,輸入下面的過(guò)程。第一個(gè)過(guò)程為在打開(kāi)工作簿時(shí)調(diào)用創(chuàng)建工具欄的過(guò)程,第二個(gè)過(guò)程為在關(guān)閉工作簿時(shí)調(diào)用刪除工具欄的過(guò)程。
Private Sub Workbook_Open()
Call CreateToolbar
End SubPrivate
Sub Workbook_BeforeClose(Cancel As Boolean)
Call DeleteToolbar
End Sub 過(guò)程CreateToolbar的代碼如下:
Const TOOLBARNAME As String = "我的工具欄"
Sub CreateToolbar()
Dim TBar As CommandBar
Dim Btn As CommandBarButton
'如果存在則刪除已存在的工具欄
On Error Resume Next
CommandBars(TOOLBARNAME).Delete
On Error GoTo 0
'創(chuàng)建工具欄
Set TBar = CommandBars.Add
With TBar
.Name = TOOLBARNAME
.Visible = True
End With
'添加按鈕
Set Btn = TBar.Controls.Add(Type:=msoControlButton)
With Btn
.FaceId = 300
.OnAction = "Macro1"
.Caption = "這里是Macro1的提示"
End With
'添加另一個(gè)按鈕
Set Btn = TBar.Controls.Add(Type:=msoControlButton)
With Btn
.FaceId = 25
.OnAction = "Macro2"
.Caption = "這里是Macro2的提示"
End With
End Sub
代碼中使用了一個(gè)模塊級(jí)的常量TOOLBARNAME,用來(lái)存儲(chǔ)工具欄的名稱(chēng),并用于這兩個(gè)過(guò)程中。
如果已存在具有相同名字的工具欄,則該過(guò)程先刪除該工具欄。這樣將會(huì)避免企圖創(chuàng)建與已存在的工具欄有相同名稱(chēng)的工具欄時(shí),產(chǎn)生錯(cuò)誤。
通過(guò)使用CommandBars對(duì)象的Add方法來(lái)創(chuàng)建該工具欄,使用Controls對(duì)象的Add方法來(lái)添加兩個(gè)按鈕,每個(gè)按鈕都有三個(gè)屬性:
FaceID:確定顯示在按鈕中的圖像的數(shù)字。
OnAction:在單擊按鈕時(shí)執(zhí)行的宏。
Caption:鼠標(biāo)指針懸浮在按鈕上時(shí)顯示的屏幕提示。
技巧:不僅可以設(shè)置FaceID屬性,還可以設(shè)置Picture屬性,使用任何的imageMso圖像。例如,下面的語(yǔ)句晶粒示一個(gè)綠色的勾號(hào):
PLAIN TEXT
Visual Basic:
.Picture = Application.CommandBars.GetImageMso _
("AcceptInvitation", 16, 16)
關(guān)于imageMso圖像的更多信息,請(qǐng)參見(jiàn)“定制RibbonX”。
在關(guān)閉工作簿時(shí),觸發(fā)Workbook_BeforeClose事件過(guò)程,調(diào)用過(guò)程DeleteToolbar:
Sub DeleteToolbar()
On Error Resume Next
CommandBars(TOOLBARNAME).Delete
On Error GoTo 0
End Sub
如果想在Excel 2007中創(chuàng)建一個(gè)工具欄,應(yīng)注意下面的一些限制:
不能夠自由浮動(dòng)
總是顯示在加載項(xiàng)選項(xiàng)卡自定義工具欄組中
Excel會(huì)忽略一些CommandBar的屬性和方法
創(chuàng)建工具欄的代碼
這里的代碼假定有一個(gè)帶有兩個(gè)名為Macro1和Macro2宏的工作簿,并且在該工作簿打開(kāi)時(shí)創(chuàng)建這個(gè)工具欄,在關(guān)閉該工作簿時(shí)刪除這個(gè)工具欄。
注意,與Ribbon定制不同,不管當(dāng)前是哪個(gè)工作簿,自定義工具欄者是可見(jiàn)的。
在ThisWorkbook代碼模塊中,輸入下面的過(guò)程。第一個(gè)過(guò)程為在打開(kāi)工作簿時(shí)調(diào)用創(chuàng)建工具欄的過(guò)程,第二個(gè)過(guò)程為在關(guān)閉工作簿時(shí)調(diào)用刪除工具欄的過(guò)程。
Private Sub Workbook_Open()
Call CreateToolbar
End SubPrivate
Sub Workbook_BeforeClose(Cancel As Boolean)
Call DeleteToolbar
End Sub 過(guò)程CreateToolbar的代碼如下:
Const TOOLBARNAME As String = "我的工具欄"
Sub CreateToolbar()
Dim TBar As CommandBar
Dim Btn As CommandBarButton
'如果存在則刪除已存在的工具欄
On Error Resume Next
CommandBars(TOOLBARNAME).Delete
On Error GoTo 0
'創(chuàng)建工具欄
Set TBar = CommandBars.Add
With TBar
.Name = TOOLBARNAME
.Visible = True
End With
'添加按鈕
Set Btn = TBar.Controls.Add(Type:=msoControlButton)
With Btn
.FaceId = 300
.OnAction = "Macro1"
.Caption = "這里是Macro1的提示"
End With
'添加另一個(gè)按鈕
Set Btn = TBar.Controls.Add(Type:=msoControlButton)
With Btn
.FaceId = 25
.OnAction = "Macro2"
.Caption = "這里是Macro2的提示"
End With
End Sub
代碼中使用了一個(gè)模塊級(jí)的常量TOOLBARNAME,用來(lái)存儲(chǔ)工具欄的名稱(chēng),并用于這兩個(gè)過(guò)程中。
如果已存在具有相同名字的工具欄,則該過(guò)程先刪除該工具欄。這樣將會(huì)避免企圖創(chuàng)建與已存在的工具欄有相同名稱(chēng)的工具欄時(shí),產(chǎn)生錯(cuò)誤。
通過(guò)使用CommandBars對(duì)象的Add方法來(lái)創(chuàng)建該工具欄,使用Controls對(duì)象的Add方法來(lái)添加兩個(gè)按鈕,每個(gè)按鈕都有三個(gè)屬性:
FaceID:確定顯示在按鈕中的圖像的數(shù)字。
OnAction:在單擊按鈕時(shí)執(zhí)行的宏。
Caption:鼠標(biāo)指針懸浮在按鈕上時(shí)顯示的屏幕提示。
技巧:不僅可以設(shè)置FaceID屬性,還可以設(shè)置Picture屬性,使用任何的imageMso圖像。例如,下面的語(yǔ)句晶粒示一個(gè)綠色的勾號(hào):
PLAIN TEXT
Visual Basic:
.Picture = Application.CommandBars.GetImageMso _
("AcceptInvitation", 16, 16)
關(guān)于imageMso圖像的更多信息,請(qǐng)參見(jiàn)“定制RibbonX”。
在關(guān)閉工作簿時(shí),觸發(fā)Workbook_BeforeClose事件過(guò)程,調(diào)用過(guò)程DeleteToolbar:
Sub DeleteToolbar()
On Error Resume Next
CommandBars(TOOLBARNAME).Delete
On Error GoTo 0
End Sub