版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
在Excel2023中創(chuàng)建自定義菜單并為菜單項(xiàng)指定宏Excel2023使用了新的用戶界面,每項(xiàng)功能都在稱(chēng)作Ribbon的功能區(qū)中且它們的位置都是固定的,僅快速訪問(wèn)工具欄(QAT)與先前版本的工具欄相似,可用來(lái)添加或刪除命令。因此,在Excel2023中創(chuàng)建自定義菜單并為菜單項(xiàng)指定宏不像在Excel2023中那樣容易。本文匯總了JohnWalkenbach、JohnMcLea和RondeBruin所介紹的技術(shù)。
----技術(shù)基礎(chǔ)
——辨認(rèn)工具欄圖像
假如使用Excel97或以后的版本,您知道它使用一些圖像在它的內(nèi)置菜單和工具欄中。您可以通過(guò)設(shè)立FaceID屬性為一個(gè)特定的整數(shù)在自定義菜單和工具欄中使用這些內(nèi)置圖像。然而,問(wèn)題是如何知道圖像所相應(yīng)的整數(shù)。
下面的子過(guò)程創(chuàng)建了一個(gè)帶有開(kāi)始的250個(gè)FaceID圖像(見(jiàn)下圖1所示)的自定義工具欄。創(chuàng)建了工具欄之后,將鼠標(biāo)指針?lè)旁诎粹o上面來(lái)找到與圖像相應(yīng)的FaceID值。但單擊工具欄按鈕不會(huì)產(chǎn)生任何效果,由于子過(guò)程沒(méi)有在OnAction屬性中分派任何宏。當(dāng)然,您可以通過(guò)改變IDStart和IDStop的值來(lái)看到更多的圖像,最后一個(gè)FaceID圖像顯示數(shù)字3518(也有一些空白圖像)。
[img][/img]
圖1:創(chuàng)建一個(gè)FaceID工具欄,當(dāng)鼠標(biāo)放在某圖像上時(shí)將顯示相應(yīng)的數(shù)字
下面是子過(guò)程代碼:
SubShowFaceIDs()
DimNewToolbarAsCommandBar
DimNewButtonAsCommandBarButton
DimiAsInteger,IDStartAsInteger,IDStopAsInteger
'假如已存在FaceIds工具欄則刪除
OnErrorResumeNext
Application.CommandBars("FaceIds").Delete
OnErrorGoTo0
'添加一個(gè)空工具欄
SetNewToolbar=Application.CommandBars.Add_
(Name:="FaceIds",temporary:=True)
NewToolbar.Visible=True
'可以改變下面的值來(lái)看到不同的FaceIDs
IDStart=1
IDStop=250
Fori=IDStartToIDStop
SetNewButton=NewToolbar.Controls.Add_
(Type:=msoControlButton,ID:=2950)
NewButton.FaceId=i
NewButton.Caption="FaceID="&i
Nexti
NewToolbar.Width=600
EndSub
此外,也可以使用VBA代碼在工作表中列出所有的FaceID圖像和相相應(yīng)的整數(shù)。該代碼由JohnD.McLean編寫(xiě),代碼清單如下:
'在工作表中顯示所有工具欄按鈕圖像/圖標(biāo),由36行100列組成
'相應(yīng)的最左/右列和最頂/底行中的數(shù)字相加即為該圖標(biāo)號(hào)
SubDisplayButtonFacesInGrid()
ConstcbName="JDMTestToolBar"
DimcBarAsCommandBar,cButAsCommandBarControl
DimrAsLong,cAsInteger,countAsInteger
Application.StatusBar="CreatingButtonFaceIDs......."
Workbooks.Add
'創(chuàng)建四周的數(shù)字
Forr=0To35
Cells(r+2,1).Value=100*r:Cells(r+2,102).Value=100*r
Nextr
Forc=0To99
Cells(1,c+2).Value=c:Cells(38,c+2).Value=c
Nextc
Range("A1:A38").Select
WithSelection
.Font.Bold=True
.HorizontalAlignment=xlCenter
.VerticalAlignment=xlCenter
EndWith
Range("CX1:CX38").Select
WithSelection
.Font.Bold=True
.HorizontalAlignment=xlCenter
.VerticalAlignment=xlCenter
EndWith
Range("B1:CW1").Select
WithSelection
.Font.Bold=True
.HorizontalAlignment=xlCenter
.VerticalAlignment=xlCenter
EndWith
Range("B38:CW38").Select
WithSelection
.Font.Bold=True
.HorizontalAlignment=xlCenter
.VerticalAlignment=xlCenter
EndWith
Range("E5").Select
Selection.Value="Pleasewait.............."
WithSelection.Font
.Name="Arial"
.Size=24
.Bold=True
.ColorIndex=3
EndWith
Range("E5:J10").Select
WithSelection
.HorizontalAlignment=xlCenter
.VerticalAlignment=xlCenter
.MergeCells=True
EndWith
Application.ScreenUpdating=False
WithSelection
.ClearContents
.UnMerge
EndWith
OnErrorResumeNext
CommandBars(cbName).Delete
OnErrorGoTo0
SetcBar=CommandBars.Add'創(chuàng)建帶有一個(gè)按鈕的臨時(shí)工具欄
WithcBar
.Name=cbName
.Top=0
.Left=0
.Visible=True
EndWith
r=2:c=2:count=0'在單元格Cell(2,2)中的FaceID號(hào)為0
SetcBut=CommandBars(cbName).Controls.Add(Type:=msoControlButton)
WithcBut
Do'循環(huán)所有的FaceIDs
.FaceId=count
Cells(r,c).Select'分派至按鈕然后復(fù)制到工作表
.CopyFace
Selection.PasteSpecial
Cells(1,1).Copy
c=c+1
Ifc>=102Then'更新復(fù)制的位置
c=2
r=r+1
EndIf
count=count+1
LoopWhilecount<3519'3519是最大的FaceID號(hào)
EndWith
Rows("1:38").RowHeight=24.6'增大單元格尺寸
Columns("A:CX").ColumnWidth=5.56
WithActiveSheet.DrawingObjects'增大按鈕尺寸
.ShapeRange.ScaleWidth2#,msoFalse,msoScaleFromTopLeft
.ShapeRange.ScaleHeight2#,msoFalse,msoScaleFromTopLeft
.ShapeRange.IncrementLeft8.4
.ShapeRange.IncrementTop3#
EndWith
Range(Cells(2,2),Cells(37,101)).Select'格式化網(wǎng)格線和背景
WithSelection
With.Interior
.ColorIndex=15
.Pattern=xlSolid
EndWith
With.Borders(xlInsideVertical)
.LineStyle=xlContinuous
.Weight=xlThin
.ColorIndex=2
EndWith
With.Borders(xlInsideHorizontal)
.LineStyle=xlContinuous
.Weight=xlThin
.ColorIndex=2
EndWith
EndWith
'恢復(fù)Excel設(shè)立
CommandBars(cbName).Delete
OnErrorGoTo0
Range("A1").Select
Application.ScreenUpdating=True
Application.StatusBar=""
EndSub運(yùn)營(yíng)上面的代碼后,將新建一個(gè)工作簿,并在該工作簿內(nèi)列出所有的內(nèi)置圖標(biāo)圖像,最左列、最右列、最頂部、最底部為相應(yīng)的數(shù)字,將某圖標(biāo)相應(yīng)的最左(或右)列的數(shù)字與最頂一行(或最底一行)的數(shù)字相加,即為該圖標(biāo)相應(yīng)的數(shù)字。
(注:上面的代碼運(yùn)營(yíng)較慢,需耐心等待。)
--------------------------------------------------
在Excel97至Excel2023等版本中,可以運(yùn)用“自定義”對(duì)話框來(lái)創(chuàng)建新菜單,并建立菜單項(xiàng),但很難創(chuàng)建子菜單。因此,特定的工作簿菜單必須編寫(xiě)VBA代碼來(lái)創(chuàng)建。下面的技術(shù)介紹了使用一種相稱(chēng)簡(jiǎn)樸的方法在工作表菜單欄中創(chuàng)建自定義菜單,當(dāng)工作簿打開(kāi)時(shí)則顯示自定義的菜單,該工作簿關(guān)閉時(shí)則刪除自定義的菜單。
先來(lái)看看一個(gè)示例,該示例演示了這項(xiàng)技術(shù)。
示例文獻(xiàn)包含了所有需要?jiǎng)?chuàng)建自定義菜單的VBA代碼,在大多數(shù)情況下,不需要改變這些代碼,只需按自已的意圖簡(jiǎn)樸地自定義MenuSheet工作表即可。VBA代碼清單如下:
SubCreateMenu()
'當(dāng)工作簿打開(kāi)時(shí)本過(guò)程自動(dòng)執(zhí)行.
'注:在這個(gè)子過(guò)程中沒(méi)有錯(cuò)誤解決語(yǔ)句.
DimMenuSheetAsWorksheet
DimMenuObjectAsCommandBarPopup
DimMenuItemAsObject
DimSubMenuItemAsCommandBarButton
DimRowAsInteger
DimMenuLevel,NextLevel,PositionOrMacro,Caption,Divider,FaceId
''''''''''''''''''''''''''''''''''''''''''''''''''''
'獲取菜單數(shù)據(jù)的位置
SetMenuSheet=ThisWorkbook.Sheets("MenuSheet")
''''''''''''''''''''''''''''''''''''''''''''''''''''
'保證菜單不反復(fù)
CallDeleteMenu
'行初始值
Row=2
'使用MenuSheet工作表中的數(shù)據(jù)添加菜單,菜單項(xiàng)和子菜單項(xiàng)
DoUntilIsEmpty(MenuSheet.Cells(Row,1))
WithMenuSheet
MenuLevel=.Cells(Row,1)
Caption=.Cells(Row,2)
PositionOrMacro=.Cells(Row,3)
Divider=.Cells(Row,4)
FaceId=.Cells(Row,5)
NextLevel=.Cells(Row+1,1)
EndWith
SelectCaseMenuLevel
Case1'代表菜單
'添加頂級(jí)菜單到工作表菜單欄中
SetMenuObject=Application.CommandBars(1)._Controls.Add(Type:=msoControlPopup,_
Before:=PositionOrMacro,_
Temporary:=True)
MenuObject.Caption=Caption
Case2'代表菜單項(xiàng)
IfNextLevel=3Then
SetMenuItem=MenuObject.Controls.Add(Type:=msoControlPopup)
Else
SetMenuItem=MenuObject.Controls.Add(Type:=msoControlButton)
MenuItem.OnAction=PositionOrMacro
EndIf
MenuItem.Caption=Caption
IfFaceId<>""ThenMenuItem.FaceId=FaceId
IfDividerThenMenuItem.BeginGroup=True
Case3'代表子菜單項(xiàng)
SetSubMenuItem=MenuItem.Controls.Add(Type:=msoControlButton)
SubMenuItem.Caption=Caption
SubMenuItem.OnAction=PositionOrMacro
IfFaceId<>""ThenSubMenuItem.FaceId=FaceId
IfDividerThenSubMenuItem.BeginGroup=True
EndSelect
Row=Row+1
Loop
EndSub
SubDeleteMenu()
'這個(gè)子過(guò)程在工作簿關(guān)閉時(shí)執(zhí)行
'刪除自定義菜單
DimMenuSheetAsWorksheet
DimRowAsInteger
DimCaptionAsString
OnErrorResumeNext
SetMenuSheet=ThisWorkbook.Sheets("MenuSheet")
Row=2
DoUntilIsEmpty(MenuSheet.Cells(Row,1))
IfMenuSheet.Cells(Row,1)=1Then
Caption=MenuSheet.Cells(Row,2)
Application.CommandBars(1).Controls(Caption).Delete
EndIf
Row=Row+1
Loop
OnErrorGoTo0
EndSub
SubDummyMacro()
MsgBox"您可以在本過(guò)程中添加相應(yīng)的操作代碼."
EndSub
換句話說(shuō),該技術(shù)使用了一個(gè)存放在MenuSheet工作表中的表格(如下圖2所示),只需按自已的需要簡(jiǎn)樸地修改表中的數(shù)據(jù),就可創(chuàng)建自已的菜單。
[img][/img]
圖2:存放菜單項(xiàng)的表格
該表格包含5列:
(1)級(jí)別:指定的菜單項(xiàng)的級(jí)別,有效值是1、2、3。第1級(jí)別是菜單,第2級(jí)別是菜單項(xiàng),第3級(jí)別是子菜單項(xiàng)。正常情況下,有一個(gè)第1級(jí)別的菜單,下面包具有第2級(jí)別的菜單項(xiàng)。一個(gè)第2級(jí)別的菜單項(xiàng)也許包含或不包具有第3級(jí)別的菜單項(xiàng)(子菜單項(xiàng))。
(2)標(biāo)題:顯示在菜單、菜單項(xiàng)和子菜單項(xiàng)中的文字。使用連接符(&)指定一個(gè)帶下劃線的字符。
(3)位置/宏:對(duì)于第1級(jí)菜單,應(yīng)當(dāng)是一個(gè)整數(shù),代表菜單在菜單欄中的位置。對(duì)于第2級(jí)或第3級(jí)菜單項(xiàng),應(yīng)當(dāng)是一個(gè)宏,當(dāng)該菜單項(xiàng)被選擇時(shí)執(zhí)行相應(yīng)的宏。假如第2級(jí)菜單項(xiàng)有一個(gè)或多個(gè)第3級(jí)菜單項(xiàng),第2級(jí)菜單項(xiàng)也許沒(méi)有一個(gè)宏與它相關(guān)聯(lián)。
(4)分隔線:假如設(shè)立為真,將在菜單項(xiàng)或子菜單項(xiàng)前放置一個(gè)分隔線。
(5)FaceID(圖標(biāo)號(hào)):可選的。一個(gè)代碼數(shù)字,代表顯示在菜單項(xiàng)前內(nèi)置的圖形圖像。獲取代碼數(shù)字可見(jiàn)上文所介紹的辨認(rèn)工具欄圖像的內(nèi)容。
下圖3顯示了使用上面的表格所創(chuàng)建的自定義菜單。
[img][/img]
圖3:一個(gè)自定義菜單的例子
要在工作簿或者加載宏中使用這項(xiàng)技術(shù),可以按照下面的環(huán)節(jié)進(jìn)行:
(1)打開(kāi)前面下載的工作簿文獻(xiàn)。該工作簿包具有VBA代碼和一個(gè)名為MenuSheet的工作表。
(2)將該工作簿中的所有代碼復(fù)制到自已的VBA工程的模塊中。
(3)將下面的子過(guò)程添加到ThisWorkbook對(duì)象模塊中:
PrivateSubWorkbook_Open()
CallCreateMenu
EndSubPrivateSubWorkbook_BeforeClose(CancelAsBoolean)
CallDeleteMenu
EndSub
(4)當(dāng)工作簿打開(kāi)時(shí),執(zhí)行Workbook_Open子過(guò)程,當(dāng)工作簿關(guān)閉時(shí),執(zhí)行Workbook_BeforeClose子過(guò)程。
(5)插入一個(gè)新工作表并命名為MenuSheet。然后直接復(fù)制menumakr.xls文獻(xiàn)中的表格到MenuSheet工作表中。
(6)按自已的需要修改MenuSheet工作表中的表格。
-----------------------------
下面的內(nèi)容應(yīng)用了前面所講的技術(shù)在Excel2023中創(chuàng)建自定義菜單,并為菜單項(xiàng)指定相應(yīng)的宏,如圖4所示。
[img][/img]
圖4:在Excel2023中自定義菜單示例
——只用于一個(gè)工作簿
可以按下面的環(huán)節(jié)在特定的Excel2023工作簿中創(chuàng)建自定義菜單:
在Excel2023中打開(kāi)該工作簿。
在快速訪問(wèn)工具欄(QAT)中單擊右鍵,選擇“自定義快速訪問(wèn)工具欄”,彈出“Excel選項(xiàng)”對(duì)話框。在對(duì)話框中的“從下列位置選擇命令”下拉列表框中選擇“宏”,然后在右側(cè)的“自定義快速訪問(wèn)工具欄”下拉列表框中選擇“用于MyWorkbook.xlsm”。
然后,在左側(cè)的列表框中選擇“WBDisplayPopUp”,單擊“添加”按鈕,再單擊“擬定”按鈕。
假如想修改所要顯示的圖標(biāo),可單擊下方的“修改”按鈕。
[img][/img]
圖5:在“Excel選項(xiàng)”中添加自定義菜單
(4)此時(shí),快速訪問(wèn)工具欄中新增了一個(gè)圖標(biāo),點(diǎn)擊該圖標(biāo)將彈出自定義菜單。能使用Ctrl+M組合鍵快速打開(kāi)菜單,也能使用“宏”對(duì)話框(按Alt+F8鍵)修改快捷鍵。
其實(shí),在示例工作簿中隱藏著一個(gè)工作表,該工作表上存放著菜單項(xiàng)名稱(chēng)、所執(zhí)行的宏名及圖標(biāo)號(hào)等。可以在任一工作表標(biāo)簽中單擊右鍵,選擇“取消隱藏”命令,或在“開(kāi)始”功能區(qū)中選擇“格式”下的“隱藏/取消隱藏”中相應(yīng)的命令來(lái)顯示該工作表。該工作表如圖6所示。
圖6:存放菜單項(xiàng)名、宏名及圖標(biāo)號(hào)的MenuSheet工作表
與前面所講述的內(nèi)容同樣,該工作表中包含5列,分別為:
(1)級(jí)別:指定的菜單項(xiàng)的級(jí)別,有效值是2和3。第2級(jí)別是菜單項(xiàng),第3級(jí)別是子菜單項(xiàng)。
(2)標(biāo)題:顯示在菜單、菜單項(xiàng)和子菜單項(xiàng)中的文字。使用連接符(&)指定一個(gè)帶下劃線的字符。
(3)宏:對(duì)于第2級(jí)或第3級(jí)菜單項(xiàng),應(yīng)當(dāng)是一個(gè)宏,當(dāng)該菜單項(xiàng)被選擇時(shí)執(zhí)行相
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《電源轉(zhuǎn)移》課件
- 《實(shí)木家具調(diào)研報(bào)告》課件
- 《香港言語(yǔ)治療服務(wù)》課件
- 課件人力資源開(kāi)發(fā)與
- 2024年醫(yī)療設(shè)備采購(gòu)與供應(yīng)合同3篇
- 2024年生產(chǎn)車(chē)間承包與人力資源整合合同范本3篇
- 改裝環(huán)衛(wèi)三輪車(chē)協(xié)議書(shū)(2篇)
- 2024年物聯(lián)網(wǎng)技術(shù)在農(nóng)業(yè)中的應(yīng)用合同
- 2025年梧州貨運(yùn)從業(yè)資格證模擬考試
- 2025年珠海道路運(yùn)輸從業(yè)資格證考試內(nèi)容是什么
- DL∕T 1631-2016 并網(wǎng)風(fēng)電場(chǎng)繼電保護(hù)配置及整定技術(shù)規(guī)范
- 光伏接入系統(tǒng)方案
- 通風(fēng)保溫施工合同范本
- 物業(yè)免租期申請(qǐng)書(shū)
- 保險(xiǎn)公司高管資格考試綜合題及答案
- 2025屆黑龍江省黑河北安市數(shù)學(xué)七上期末考試試題含解析
- 鄭州市鄭州外國(guó)語(yǔ)中學(xué)等4校2022-2023學(xué)年七年級(jí)上學(xué)期期末數(shù)學(xué)試題
- QCT457-2023救護(hù)車(chē)技術(shù)規(guī)范
- 廣東省深圳市南山區(qū)2023-2024學(xué)年四年級(jí)上學(xué)期期末數(shù)學(xué)試卷
- 醫(yī)院培訓(xùn)課件:《分級(jí)護(hù)理制度》
- 2023-2024學(xué)年福建省廈門(mén)市湖里區(qū)八年級(jí)(上)期末數(shù)學(xué)試卷
評(píng)論
0/150
提交評(píng)論