|
大家好,我們今日繼續(xù)講解VBA代碼解決方案的第121講內(nèi)容:如何在Excel工作表的菜單中自定義添加新的菜單項(xiàng)和子菜單 在我之前的文章中講到,我最初VBA是學(xué)習(xí)前輩的代碼,前輩的文件響應(yīng)代碼就是通過(guò)菜單的自定義來(lái)實(shí)現(xiàn)的,今日我們也來(lái)談?wù)勛远x菜單的問(wèn)題。添加菜單可以用Add方法。 Add方法應(yīng)用于CommandBarControls對(duì)象時(shí),新建一個(gè)CommandBarControl對(duì)象并添加到指定命令欄上的控件集合,語(yǔ)法如下: expression.Add(Type, Id, Parameter, Before, Temporary) 參數(shù)expression 是必須的,返回一個(gè)CommandBarControls對(duì)象,代表命令欄中的所有控件。 參數(shù)Type是可選的,添加到指定命令欄的控件類型,可以為下面所列的常數(shù)之一。 msoControlButton 1 命令按鈕 msoControlEdit 2 文本框 msoControlDropdown 3 下拉列表控制框 msoControlComboBox 4 下拉組合控制框 msoControlPopup 10 彈出式控件 參數(shù)Id是可選的,標(biāo)識(shí)整數(shù)。如果將該參數(shù)設(shè)置為 1或者忽略,將在命令欄中添加一個(gè)空的指定類型的自定義控件。 參數(shù)Parameter是可選的,對(duì)于內(nèi)置控件,該參數(shù)用于容器應(yīng)用程序運(yùn)行命令。對(duì)于自定義控件,可以使用該參數(shù)向Visual Basic過(guò)程傳遞信息,或用其存儲(chǔ)控件信息。 參數(shù)Before是可選的,表示新控件在命令欄上位置的數(shù)字。新控件將插入到該位置控件之前。如果忽略該參數(shù),控件將添加到指定命令欄的末端。 參數(shù)Temporary是可選的。設(shè)置為True將使添加的菜單項(xiàng)為臨時(shí)的,在關(guān)閉應(yīng)用程序時(shí)刪除。默認(rèn)值為False。 下面我們就一個(gè)實(shí)例來(lái)講解如何添加菜單。如下面的代碼所示。 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學(xué)習(xí)' .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 '歡迎學(xué)習(xí)VBA代碼解決方案第一冊(cè)' End Sub Sub myNz2() MsgBox '歡迎學(xué)習(xí)VBA代碼解決方案第二冊(cè)' End Sub Sub myNz3() MsgBox '歡迎學(xué)習(xí)VBA代碼解決方案第三冊(cè)' End Sub 代碼解析:myTools過(guò)程使用Add方法在Excel工作表菜單欄中加一個(gè)標(biāo)題為'VBA學(xué)習(xí)'的菜單項(xiàng)和3個(gè)子菜單。 第2行到第5行代碼聲明變量類型。 第6,7行代碼使用Array函數(shù)創(chuàng)建數(shù)組用于保存子菜單的名稱,和菜單的動(dòng)作 第9行代碼,在添加菜單項(xiàng)前先使用Reset方法重置菜單欄以免重復(fù)添加菜單項(xiàng)。Reset方法重置一個(gè)內(nèi)置控件,恢復(fù)該控件原來(lái)對(duì)應(yīng)的動(dòng)作,并將各屬性恢復(fù)成初始狀態(tài), 語(yǔ)法如下:expression.Reset 參數(shù)expression 是必須的,返回一個(gè)命令欄或命令欄控件對(duì)象。 第10行代碼,使用Add方法在Excel工作表菜單欄中添加菜單項(xiàng)。因?yàn)樵诒纠袑⑻砑拥氖菐в凶硬藛蔚牟藛雾?xiàng),所以將參數(shù)Type設(shè)置為彈出式控件。 第12行代碼,設(shè)定新添加菜單項(xiàng)的Caption屬性為'VBA學(xué)習(xí)'。Caption屬性返回或設(shè)置命令欄控件的標(biāo)題。 第13行代碼,設(shè)置新添加菜單項(xiàng)的BeginGroup屬性為True,分組顯示。 第14行到第18行代碼,在'VBA學(xué)習(xí)'菜單項(xiàng)上添加3個(gè)子菜單并設(shè)置其Caption屬性。和相應(yīng)的動(dòng)作。 好了,我們看我們的運(yùn)行效果: 運(yùn)行前界面: 點(diǎn)擊添加菜單: 點(diǎn)擊'VBA代碼解決方案1':彈出對(duì)話框效果。 上述代碼中: Sub MynzDelmyTools() Application.CommandBars('Worksheet menu bar').Reset End Sub 是重置菜單,也就是說(shuō)在退出前要重置一下菜單。 關(guān)于菜單內(nèi)容還有一些內(nèi)容,或許充實(shí)到結(jié)集后的文章中。本篇的文章太長(zhǎng)了。 今日內(nèi)容回向: 1. 如何設(shè)置菜單? 2 如何讓菜單響應(yīng)不同的動(dòng)作? |
|
|