excel_vba_编程教程(完整版)-第78章
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
栏上其它菜单的ID:
Set myControl = mandBars(〃Worksheet menu bar〃)ntrols (InputBox(〃Enter the menu
name (Example: Format):〃))
3。 运行过程Return_Id,然后切换到立即窗口查看其结果
4。 在立即窗口里输入下述语句,可以创建一个名为Other的自定义菜单,并将它放置在内置工作
表菜单栏上:
mandBars(〃Worksheet menu bar〃)ntrols。 Add(Type:=msoControlPopup;
241
… 页面 258…
before:=10)。Caption = 〃&Other〃
当你按下回车键并切换回Excel应用程序窗口时,工作表菜单栏将会在“帮助”菜单前显示你
的自定义菜单。如果你没有将上面的语句输入在一行的话,它就不会起作用。
现在“Other”菜单是空的,下面一步时示范如何添加菜单命令。
5。 在立即窗口里输入下述语句,给自定义菜单里添加自定义命令(选项):
mandBars(〃Worksheet menu bar〃)ntrols(〃Other〃)。
Controls。Add(Type:=msoControlButton; before:=1) _
。Caption = 〃Gridlines〃
当你按下回车键并切换到Excel应用程序菜单,然后选择Other,你将看到命令Gridlines。如
果你没有将上面的语句输入在一行的话,它就不会起作用。
下一步将要求你给你的自定义菜单选项指定一个适当的VBA过程,当用户选择该菜单时就会执
行。
6。 在当前工程代码窗口里输入下述过程打开或者关闭网格线的显示:
Sub GridOnOff( )
ActiveWindow。DisplayGridlines = Not ActiveWindow。DisplayGridlines
End Sub
7。 在立即窗口里输入下面的代码,将过程GridOnOff指定给你的自定义菜单选项:
mandBars(〃Worksheet menu bar〃)ntrols(〃Other〃)ntrols
(〃Gridlines〃)。OnAction = 〃GridOnOff〃
当你按下回车,VB就会将过程GridOnOff指定给Gridlines菜单项。如果你没有将上面的语句输
入在一行的话,它就不会起作用。
当你切换到Excel应用程序窗口并且选择“Other”|“Gridlines”的时候,如果网格线显示被
关闭时,VB就会打开网格线显示,反之亦然。
将菜单项的属性Enabled设置为False可以临时禁用该菜单项。一个被禁用的菜单项其名称将变
为灰色,并且点击它时不会有任何反应。
8。 在立即窗口里输入下述语句在同一行,可以禁用Other菜单里的Gridlines命令:
mandBars(〃Worksheet menu bar〃)ntrols(〃Other〃)ntrols (〃Gridlines〃)。Enabled
= False
当你按下回车,VB就会将Gridlines菜单项禁用。如果你没有将上面的语句输入在一行的话,
它就不会起作用。当你切换到Excel应用程序窗口并且选择Other时,Gridlines选项不再可用。
9。 要激活Other菜单里的Gridlines命令的话,可以在立即窗口里将逻辑值False取代为True:
mandBars(〃Worksheet menu bar〃)ntrols(〃Other〃)。 Controls (〃Gridlines〃)。Enabled
= True
注意,内置菜单上的每个具体选项都是和它们相似的命令组织在一起的,组和组之间用一条横
线分割开(见图12…9)。使用方法BeginGroup可以在菜单项之间添加这样一条线。
图12…9 每个菜单用横线分成好几个部分
10。 在立即窗口里输入下述语句,可以在“窗口”菜单的“隐藏”命令上面添加一条横线:
mandBars(〃Worksheet menu bar〃)ntrols(〃Window〃)ntrols (〃Hide〃)。BeginGroup =
242
… 页面 259…
True
当你按下回车,VB就会在窗口菜单的隐藏命令上面添加一条横线。如果你没有将上面的语句输
入在一行的话,它就不会起作用。
当你切换到Excel应用程序窗口并且选择窗口,你就会看到隐藏和取消隐藏命令包含在两条横
线里了。上面的那条就是你自己添加的。
当某个菜单项被选中时,该选项左边就会出现一个复选记号,例如在图12…9里的视图菜单里,
编辑栏和状态栏左边的复选记号表明这些选项当前是有效的。
11。 要显示你的自定义Other菜单里的Gridlines选项被选中的话,可以修改过程GridOnOff,如下
所示:
Sub GridOnOff()
Dim Other As Object
Set Other = mandBars(〃Worksheet menu bar〃)ntrols(〃Other〃)
ActiveWindow。DisplayGridlines = Not ActiveWindow。DisplayGridlines
If ActiveWindow。DisplayGridlines = True Then
Otherntrols(〃Gridlines〃)。State = msoButtonDown
Else
Otherntrols(〃Gridlines〃)。State = msoButtonUp
End If
End Sub
运行该过程,然后切换到Excel窗口,并且选择Other | Gridlines。如果活动工作表的网格
线时显示的话,那么它们现在就会被关闭。再次选择Other | Gridlines。
12。 在立即窗口里输入下述语句,以删除内置工作表菜单栏里的自定义菜单:
mandBars(〃Worksheet menu bar〃)ntrols(〃Other〃)。Delete
当你删除某个自定义菜单的时候,里面所有的菜单项都会自动被删除。自定义菜单以及其选项
一旦被删除,你就不能恢复它们。
10。创建子菜单
菜单项在其名称右边包含一个黑色三角的,都会显示一个子菜单,包括一些额外的命令。假设你想
在工具菜单里添加一个子菜单。
1。 在立即窗口里输入下述语句,给工具菜单添加一个子菜单:
mandBars(〃Worksheet menu
bar〃)ntrols(〃Tools〃)ntrols。Add(Type:=msoControlPopup; Before:=1) _
。Caption = 〃My Submenu〃
当你按下回车键,上面的指令会在工具菜单(工作表菜单栏)的上面放置一个自定义子菜单,
叫做My Submenu。如果你没有将上面的语句输入在一行的话,它就不会起作用。
2。 在立即窗口里输入下述一行指令,可以在子菜单里添加自定义命令:
mandBars(〃Worksheet menu bar〃)ntrols(〃Tools〃)ntrols(〃My
Submenu〃)ntrols _
。Add(Type:=msoControlButton; Before:=1)。Caption = 〃Option 1〃
当你按下回车键,上面的指令会在工具菜单里的My Submenu里添加命令Option 1。如果你没有
将上面的语句输入在一行的话,它就不会起作用。你可以使用相同的技术给你的子菜单里添加
更多的菜单项。
下面的过程将在内置菜单格式里添加自定义子菜单Colors,并且在里面放置四个选项:Red; Green;
Blue和Black。使用这些选项,你可以更改所选工作表单元格或者单元格区域里的文本颜色。接下
来的过程将应用适当的颜色格式。
Sub Colors()
Dim myMenu As Object
Dim mySubMenu As Object
Set myMenu = mandBars(〃Worksheet menu bar〃)ntrols(〃Format〃)
With myMenu
243
… 页面 260…
ntrols。Add(Type:=msoControlPopup; Before:=2)。Caption = 〃Colors〃
End With
Set mySubMenu = myMenuntrols(〃Colors〃)
With mySubMenu
ntrols。Add(Type:=msoControlButton)。Caption = 〃Red〃
ntrols。Add(Type:=msoControlButton)。Caption = 〃Green〃
ntrols。Add(Type:=msoControlButton)。Caption = 〃Blue〃
ntrols。Add(Type:=msoControlButton)。Caption = 〃Black〃
ntrols(〃Red〃)。OnAction = 〃ColorRed〃
ntrols(〃Green〃)。OnAction = 〃ColorGreen〃
ntrols(〃Blue〃)。OnAction = 〃ColorBlue〃
ntrols(〃Black〃)。OnAction = 〃ColorBlack〃
End With
End Sub
Sub ColorRed()
ActiveCell。Fontlor = RGB(255; 0; 0)
End Sub
Sub ColorGreen()
ActiveCell。Fontlor = RGB(0; 255; 0)
End Sub
Sub ColorBlue()
ActiveCell。Fontlor = RGB(0; 0; 255)
End Sub
Sub ColorBlack()
ActiveCell。Fontlor = RGB(0; 0; 0)
End Sub
11。修改内置快捷菜单
Excel提供了60来个快捷菜单,带有不同的经常用到的菜单项。当你在Excel应用程序窗口的某个对
象上单击右键时,快捷菜单就会出现。通过使用VBA,你可以返回快捷菜单的准确编号,还有它们
的名称。
1。 在当前工程的模块里输入过程ShortcutMenus,如下所示:
Sub ShortcutMenus()
Dim myBar As mandBar
Dim counter As Integer
For Each myBar In mandBars
If myBar。Type = msoBarTypePopup Then
counter = counter + 1
Debug。Print counter & 〃: 〃 & myBar。Name
End If
Next
End Sub
注意,要使用常量msoBarTypePopup来确定mandBars集合里的快捷菜单类型。使用常量
msoBarTypeMenuBar,可以返回内置菜单的名称。
当你运行过程ShortcutMenus后,快捷菜单的名称就会打印在立即窗口里,这里也列出来了。
Excel 2002 的内置快捷菜单: Excel 2003 的内置快捷菜单:
1: Query and Pivot 1: Query and Pivot
2: PivotChart Menu 2: PivotChart Menu
3: Workbook tabs 3: Workbook tabs
244
… 页面 261…
4: Cell 4: Cell
5: Column 5: Column
6: Row 6: Row
7: Cell 7