大家好,我們今日繼續講解VBA代碼解決方案的第121講內容:如何在Excel工作表的菜單中自定義添加新的菜單項和子菜單
在我之前的文章中講到,我最初VBA是學習前輩的代碼,前輩的文件響應代碼就是通過菜單的自定義來實現的,今日我們也來談談自定義菜單的問題。添加菜單可以用Add方法。
Add方法應用於CommandBarControls對象時,新建一個CommandBarControl對象並添加到指定命令欄上的控件集合,語法如下:
expression.Add(Type, Id, Parameter, Before, Temporary)
參數expression 是必須的,返回一個CommandBarControls對象,代表命令欄中的所有控件。
參數Type是可選的,添加到指定命令欄的控件類型,可以為下面所列的常數之一。
msoControlButton1命令按鈕
msoControlEdit2文本框
msoControlDropdown3下拉列表控制框
msoControlComboBox4下拉組合控制框
msoControlPopup10彈出式控件
參數Id是可選的,標識整數。如果將該參數設置為 1或者忽略,將在命令欄中添加一個空的指定類型的自定義控件。
參數Parameter是可選的,對於內置控件,該參數用於容器應用程序運行命令。對於自定義控件,可以使用該參數向Visual Basic過程傳遞信息,或用其存儲控件信息。
參數Before是可選的,表示新控件在命令欄上位置的數字。新控件將插入到該位置控件之前。如果忽略該參數,控件將添加到指定命令欄的末端。
參數Temporary是可選的。設置為True將使添加的菜單項為臨時的,在關閉應用程序時刪除。默認值為False。
下面我們就一個實例來講解如何添加菜單。如下面的代碼所示。
Sub MynzTools()
Dim myTools As CommandBarPopup
Dim myCap, myAct As Variant
Dim myid As Variant
Dim i As Byte
myCap = Array("VBA代碼解決方案1", "VBA代碼解決方案2", "VBA代碼解決方案3")
myAct = Array("myNz1", "myNz2", "myNz3")
With Application.CommandBars("Worksheet menu bar")
.Reset
Set myTools = .Controls.Add(Type:=msoControlPopup)
With myTools
.Caption = "VBA學習"
.BeginGroup = True
For i = 1 To 3
With .Controls.Add(Type:=msoControlButton)
.Caption = myCap(i - 1)
.OnAction = myAct(i - 1)
End With
Next
End With
End With
Set myTools = Nothing
End Sub
Sub MynzDelmyTools()
Application.CommandBars("Worksheet menu bar").Reset
End Sub
Sub myNz1()
MsgBox "歡迎學習VBA代碼解決方案第一冊"
End Sub
Sub myNz2()
MsgBox "歡迎學習VBA代碼解決方案第二冊"
End Sub
Sub myNz3()
MsgBox "歡迎學習VBA代碼解決方案第三冊"
End Sub
代碼解析:myTools過程使用Add方法在Excel工作表菜單欄中加一個標題為"VBA學習"的菜單項和3個子菜單。
第6,7行代碼使用Array函數創建數組用於保存子菜單的名稱,和菜單的動作
第9行代碼,在添加菜單項前先使用Reset方法重置菜單欄以免重複添加菜單項。Reset方法重置一個內置控件,恢復該控件原來對應的動作,並將各屬性恢復成初始狀態,
語法如下:expression.Reset
參數expression 是必須的,返回一個命令欄或命令欄控件對象。
第10行代碼,使用Add方法在Excel工作表菜單欄中添加菜單項。因為在本例中將添加的是帶有子菜單的菜單項,所以將參數Type設置為彈出式控件。
第12行代碼,設定新添加菜單項的Caption屬性為"VBA學習"。Caption屬性返回或設置命令欄控件的標題。
第13行代碼,設置新添加菜單項的BeginGroup屬性為True,分組顯示。
第14行到第18行代碼,在"VBA學習"菜單項上添加3個子菜單並設置其Caption屬性。和相應的動作。
好了,我們看我們的運行效果:
運行前界面:
點擊添加菜單:
點擊"VBA代碼解決方案1":彈出對話框效果。
上述代碼中:
Sub MynzDelmyTools()
Application.CommandBars("Worksheet menu bar").Reset
End Sub
是重置菜單,也就是說在退出前要重置一下菜單。
關於菜單內容還有一些內容,或許充實到結集後的文章中。本篇的文章太長了。
今日內容迴向:
1. 如何設置菜單?
2 如何讓菜單響應不同的動作?
閱讀更多 VBA專家 的文章