我的菜單我做主,VBA代碼在EXCEL菜單中添加自定義新項

大家好,我們今日繼續講解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

我的菜單我做主,VBA代碼在EXCEL菜單中添加自定義新項

代碼解析: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代碼在EXCEL菜單中添加自定義新項

點擊添加菜單:

我的菜單我做主,VBA代碼在EXCEL菜單中添加自定義新項

點擊"VBA代碼解決方案1":彈出對話框效果。

我的菜單我做主,VBA代碼在EXCEL菜單中添加自定義新項

上述代碼中:

Sub MynzDelmyTools()

Application.CommandBars("Worksheet menu bar").Reset

End Sub

是重置菜單,也就是說在退出前要重置一下菜單。

關於菜單內容還有一些內容,或許充實到結集後的文章中。本篇的文章太長了。

今日內容迴向:

1. 如何設置菜單?

2 如何讓菜單響應不同的動作?


分享到:


相關文章: