版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
在Excel2023中創(chuàng)建自定義菜單并為菜單項指定宏Excel2023使用了新的用戶界面,每項功能都在稱作Ribbon的功能區(qū)中且它們的位置都是固定的,僅快速訪問工具欄(QAT)與先前版本的工具欄相似,可用來添加或刪除命令。因此,在Excel2023中創(chuàng)建自定義菜單并為菜單項指定宏不像在Excel2023中那樣容易。本文匯總了JohnWalkenbach、JohnMcLea和RondeBruin所介紹的技術(shù)。
----技術(shù)基礎(chǔ)
——辨認(rèn)工具欄圖像
假如使用Excel97或以后的版本,您知道它使用一些圖像在它的內(nèi)置菜單和工具欄中。您可以通過設(shè)立FaceID屬性為一個特定的整數(shù)在自定義菜單和工具欄中使用這些內(nèi)置圖像。然而,問題是如何知道圖像所相應(yīng)的整數(shù)。
下面的子過程創(chuàng)建了一個帶有開始的250個FaceID圖像(見下圖1所示)的自定義工具欄。創(chuàng)建了工具欄之后,將鼠標(biāo)指針放在按鈕上面來找到與圖像相應(yīng)的FaceID值。但單擊工具欄按鈕不會產(chǎn)生任何效果,由于子過程沒有在OnAction屬性中分派任何宏。當(dāng)然,您可以通過改變IDStart和IDStop的值來看到更多的圖像,最后一個FaceID圖像顯示數(shù)字3518(也有一些空白圖像)。
[img][/img]
圖1:創(chuàng)建一個FaceID工具欄,當(dāng)鼠標(biāo)放在某圖像上時將顯示相應(yīng)的數(shù)字
下面是子過程代碼:
SubShowFaceIDs()
DimNewToolbarAsCommandBar
DimNewButtonAsCommandBarButton
DimiAsInteger,IDStartAsInteger,IDStopAsInteger
'假如已存在FaceIds工具欄則刪除
OnErrorResumeNext
Application.CommandBars("FaceIds").Delete
OnErrorGoTo0
'添加一個空工具欄
SetNewToolbar=Application.CommandBars.Add_
(Name:="FaceIds",temporary:=True)
NewToolbar.Visible=True
'可以改變下面的值來看到不同的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編寫,代碼清單如下:
'在工作表中顯示所有工具欄按鈕圖像/圖標(biāo),由36行100列組成
'相應(yīng)的最左/右列和最頂/底行中的數(shù)字相加即為該圖標(biā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)建帶有一個按鈕的臨時工具欄
WithcBar
.Name=cbName
.Top=0
.Left=0
.Visible=True
EndWith
r=2:c=2:count=0'在單元格Cell(2,2)中的FaceID號為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號
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)營上面的代碼后,將新建一個工作簿,并在該工作簿內(nèi)列出所有的內(nèi)置圖標(biāo)圖像,最左列、最右列、最頂部、最底部為相應(yīng)的數(shù)字,將某圖標(biāo)相應(yīng)的最左(或右)列的數(shù)字與最頂一行(或最底一行)的數(shù)字相加,即為該圖標(biāo)相應(yīng)的數(shù)字。
(注:上面的代碼運(yùn)營較慢,需耐心等待。)
--------------------------------------------------
在Excel97至Excel2023等版本中,可以運(yùn)用“自定義”對話框來創(chuàng)建新菜單,并建立菜單項,但很難創(chuàng)建子菜單。因此,特定的工作簿菜單必須編寫VBA代碼來創(chuàng)建。下面的技術(shù)介紹了使用一種相稱簡樸的方法在工作表菜單欄中創(chuàng)建自定義菜單,當(dāng)工作簿打開時則顯示自定義的菜單,該工作簿關(guān)閉時則刪除自定義的菜單。
先來看看一個示例,該示例演示了這項技術(shù)。
示例文獻(xiàn)包含了所有需要創(chuàng)建自定義菜單的VBA代碼,在大多數(shù)情況下,不需要改變這些代碼,只需按自已的意圖簡樸地自定義MenuSheet工作表即可。VBA代碼清單如下:
SubCreateMenu()
'當(dāng)工作簿打開時本過程自動執(zhí)行.
'注:在這個子過程中沒有錯誤解決語句.
DimMenuSheetAsWorksheet
DimMenuObjectAsCommandBarPopup
DimMenuItemAsObject
DimSubMenuItemAsCommandBarButton
DimRowAsInteger
DimMenuLevel,NextLevel,PositionOrMacro,Caption,Divider,FaceId
''''''''''''''''''''''''''''''''''''''''''''''''''''
'獲取菜單數(shù)據(jù)的位置
SetMenuSheet=ThisWorkbook.Sheets("MenuSheet")
''''''''''''''''''''''''''''''''''''''''''''''''''''
'保證菜單不反復(fù)
CallDeleteMenu
'行初始值
Row=2
'使用MenuSheet工作表中的數(shù)據(jù)添加菜單,菜單項和子菜單項
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'代表菜單
'添加頂級菜單到工作表菜單欄中
SetMenuObject=Application.CommandBars(1)._Controls.Add(Type:=msoControlPopup,_
Before:=PositionOrMacro,_
Temporary:=True)
MenuObject.Caption=Caption
Case2'代表菜單項
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'代表子菜單項
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()
'這個子過程在工作簿關(guān)閉時執(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"您可以在本過程中添加相應(yīng)的操作代碼."
EndSub
換句話說,該技術(shù)使用了一個存放在MenuSheet工作表中的表格(如下圖2所示),只需按自已的需要簡樸地修改表中的數(shù)據(jù),就可創(chuàng)建自已的菜單。
[img][/img]
圖2:存放菜單項的表格
該表格包含5列:
(1)級別:指定的菜單項的級別,有效值是1、2、3。第1級別是菜單,第2級別是菜單項,第3級別是子菜單項。正常情況下,有一個第1級別的菜單,下面包具有第2級別的菜單項。一個第2級別的菜單項也許包含或不包具有第3級別的菜單項(子菜單項)。
(2)標(biāo)題:顯示在菜單、菜單項和子菜單項中的文字。使用連接符(&)指定一個帶下劃線的字符。
(3)位置/宏:對于第1級菜單,應(yīng)當(dāng)是一個整數(shù),代表菜單在菜單欄中的位置。對于第2級或第3級菜單項,應(yīng)當(dāng)是一個宏,當(dāng)該菜單項被選擇時執(zhí)行相應(yīng)的宏。假如第2級菜單項有一個或多個第3級菜單項,第2級菜單項也許沒有一個宏與它相關(guān)聯(lián)。
(4)分隔線:假如設(shè)立為真,將在菜單項或子菜單項前放置一個分隔線。
(5)FaceID(圖標(biāo)號):可選的。一個代碼數(shù)字,代表顯示在菜單項前內(nèi)置的圖形圖像。獲取代碼數(shù)字可見上文所介紹的辨認(rèn)工具欄圖像的內(nèi)容。
下圖3顯示了使用上面的表格所創(chuàng)建的自定義菜單。
[img][/img]
圖3:一個自定義菜單的例子
要在工作簿或者加載宏中使用這項技術(shù),可以按照下面的環(huán)節(jié)進(jìn)行:
(1)打開前面下載的工作簿文獻(xiàn)。該工作簿包具有VBA代碼和一個名為MenuSheet的工作表。
(2)將該工作簿中的所有代碼復(fù)制到自已的VBA工程的模塊中。
(3)將下面的子過程添加到ThisWorkbook對象模塊中:
PrivateSubWorkbook_Open()
CallCreateMenu
EndSubPrivateSubWorkbook_BeforeClose(CancelAsBoolean)
CallDeleteMenu
EndSub
(4)當(dāng)工作簿打開時,執(zhí)行Workbook_Open子過程,當(dāng)工作簿關(guān)閉時,執(zhí)行Workbook_BeforeClose子過程。
(5)插入一個新工作表并命名為MenuSheet。然后直接復(fù)制menumakr.xls文獻(xiàn)中的表格到MenuSheet工作表中。
(6)按自已的需要修改MenuSheet工作表中的表格。
-----------------------------
下面的內(nèi)容應(yīng)用了前面所講的技術(shù)在Excel2023中創(chuàng)建自定義菜單,并為菜單項指定相應(yīng)的宏,如圖4所示。
[img][/img]
圖4:在Excel2023中自定義菜單示例
——只用于一個工作簿
可以按下面的環(huán)節(jié)在特定的Excel2023工作簿中創(chuàng)建自定義菜單:
在Excel2023中打開該工作簿。
在快速訪問工具欄(QAT)中單擊右鍵,選擇“自定義快速訪問工具欄”,彈出“Excel選項”對話框。在對話框中的“從下列位置選擇命令”下拉列表框中選擇“宏”,然后在右側(cè)的“自定義快速訪問工具欄”下拉列表框中選擇“用于MyWorkbook.xlsm”。
然后,在左側(cè)的列表框中選擇“WBDisplayPopUp”,單擊“添加”按鈕,再單擊“擬定”按鈕。
假如想修改所要顯示的圖標(biāo),可單擊下方的“修改”按鈕。
[img][/img]
圖5:在“Excel選項”中添加自定義菜單
(4)此時,快速訪問工具欄中新增了一個圖標(biāo),點(diǎn)擊該圖標(biāo)將彈出自定義菜單。能使用Ctrl+M組合鍵快速打開菜單,也能使用“宏”對話框(按Alt+F8鍵)修改快捷鍵。
其實(shí),在示例工作簿中隱藏著一個工作表,該工作表上存放著菜單項名稱、所執(zhí)行的宏名及圖標(biāo)號等??梢栽谌我还ぷ鞅順?biāo)簽中單擊右鍵,選擇“取消隱藏”命令,或在“開始”功能區(qū)中選擇“格式”下的“隱藏/取消隱藏”中相應(yīng)的命令來顯示該工作表。該工作表如圖6所示。
圖6:存放菜單項名、宏名及圖標(biāo)號的MenuSheet工作表
與前面所講述的內(nèi)容同樣,該工作表中包含5列,分別為:
(1)級別:指定的菜單項的級別,有效值是2和3。第2級別是菜單項,第3級別是子菜單項。
(2)標(biāo)題:顯示在菜單、菜單項和子菜單項中的文字。使用連接符(&)指定一個帶下劃線的字符。
(3)宏:對于第2級或第3級菜單項,應(yīng)當(dāng)是一個宏,當(dāng)該菜單項被選擇時執(zhí)行相
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 水產(chǎn)養(yǎng)殖行業(yè)助理工作總結(jié)
- 美容行業(yè)人力資源管理經(jīng)驗總結(jié)
- 樓梯扶手銷售工作總結(jié)
- 潛水行業(yè)潛水技巧培訓(xùn)回顧
- 糧食行業(yè)話務(wù)員工作總結(jié)
- 2024年河南省商丘市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2024年四川省涼山自治州公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2022年山東省煙臺市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 農(nóng)村先進(jìn)個人發(fā)言稿
- PEP小學(xué)生讀書心得體會作文選
- 火化證明格式
- 機(jī)械原理課程設(shè)計-自動蓋章機(jī)
- e乙二醇精制車間設(shè)備布置圖
- 行政強(qiáng)制法講座-PPT課件
- 2022年新媒體編輯實(shí)戰(zhàn)教程測試題及答案(題庫)
- 崗位現(xiàn)場應(yīng)急處置方案卡全套(全套20頁)
- 涼席竹片銑槽機(jī)(課程設(shè)計)
- 高壓線防護(hù)搭設(shè)方案
- 綜合機(jī)械化固體充填采煤技術(shù)要求-編制說明
- 十人聯(lián)名推薦表
- 七、分蛋糕博弈
評論
0/150
提交評論