利用VBA自定义Office的快捷方式

2008-02-23 06:52:05来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

你可能已经使用VBA为你的电子表格应用程序创建自定义的菜单了。不过,你可能还没有意识到还可以自定义当你右击一个对象时出现的快捷方式菜单。这项有用的技术允许你不用右击便可启动频繁使用的命令。

  在本文中,我们将讨论如何向快捷方式菜单添加和删除命令。以Excel 97为重点,我们将创建一个允许你隐藏和再现多个工作簿(只需通过右击一个制表键即可)的应用程序。这就必须创建一个表单,该表单显示了活动工作簿中任何隐藏表格的名字。你还可以选择多个将要再现的表格,通常需要对鼠标的多次单击做一些改进。

  我们还将示范如何向快捷方式菜单添加子菜单。在这种情形中,我们将向Excel快捷方式菜单添加命令,该命令允许你在工作表格单元格中按下J 之后,选择指针应该移动的方向。

A CommandBar Named "Ply"

  你可能对图1所示的菜单已经很熟悉了;无论你什么时候右击表格的制表键时,它都出现。让我们首先向这个快捷方式菜单的底部添加两个选项(Hide和 Unhide)。

  在开始之前,你应该确定在哪里存储这个过程。理想情况下,应该把它们添加到你的Excel个人宏工作簿,例如Personal.xls(如果你不熟悉这个文件,请参看第10页的“个人宏工作簿”)。

  为了开始,请通过选中Tools | Macro | Visual Basic Editor,或通过按A!_. Next之后右击Project Explorer窗口中的VBA Project (PERSONAL.XLS),然后选择nsert Module,来激活Visual Basic Editor。

现在添加AddToPlyMenu,如图2所示。正如你所看到的,该过程中的每条语句都可以处理CommandBar集合;特别是名为"Ply."的集合中的单个CommandBar。

CommandBars到底是什么呢?哪一个的名字是“Ply”呢?CommandBars是CommandBar对象的一个集合。CommandBar对象有三种类型:Normal, MenuBar,和 Popup(见图3)。CommandBar对象对Office 97来说是个新对象。这是一个复杂的话题,对它的完整讨论已超出了本文的范围。我们只对自定义已经提供给Office 97的弹出式菜单感兴趣。这就足够了——光Excel 97中就有45个!如下的VBA代码将在Immediate窗口中全部列出它们。

For Each CBar In CommandBars

 If CBar.Type = msoBarTypePopup Then

  Debug.Print CBar.Name

 End If

Next

Adding Menu Items

  返回到AddToPlyMenu过程(再次见图2),我们现在知道了第一条语句是指向当右击Excel 97中表格制表键时所出现的快捷方式菜单的,而With...End块里面的所有语句将应用到那个菜单。

With Application.CommandBars("Ply")

  在这条语句中,CommandBars是作为Application对象的属性出现的,例如本例中的Excel 97。既然Application是CommandBars属性的默认对象,那么该语句可以简化为:

With CommandBars("Ply")

  下一步,在向菜单添加新菜单项之前,调用Reset方法以确保菜单已复位到默认的外观。这可以防止我们重复添加相同的菜单项。

  如下两条语句可以向“Ply”弹出式菜单添加菜单项:

.Controls.Add(Type:=msoControlButton).Caption = _

 "Hide Sheet(s)"

.Controls.Add(Type:=msoControlButton).Caption = _

 "Unhide Sheet(s)..."

  每个CommandBar对象都有一个包含了所有关联控件的Controls集合。有许多类型的控件可以提供,但是为了完成我们的任务,我们只对标准的菜单项控件感兴趣,这些标准的菜单项控件是通过使用msoControlType常量msoControlButton指定的。关于所有类型的完整描述,请在Microsoft Office Visual Basic帮助文件中搜索"Type property"。

  Add方法用于将每个新控件添加到CommandBars.Controls集合。Add方法需要控件类型(在括号中指定),在本例中,还需要为控件的Caption属性提供一个值。我们正在添加的两个菜单项各自具有Hide Sheet(s) and Unhide Sheet(s)...的说明。

  下一条语句是:

.Controls("Hide Sheet(s)").BeginGroup = True

将在两个新菜单项之上插入一组“分隔符”。每个菜单控件都有一个BeginGroup属性,可以通过将它设置为True.来激活。

   在我们到目前为止已经考察的代码的基础之上,“Ply”弹出式菜单将出现在图4所示的图图中。不过,新的菜单项不能做任何事情,功能仍然需要与每个菜单项关联起来。下两条语句就开始实现这一功能:

.Controls("Hide Sheet(s)").OnAction = "HideSheet"

.Controls("Unhide Sheet(s)...").OnAction = "UnhideSheet"

在这里,每个项目的OnAction属性都与一个过程相关联,例如,当Sheet(s)菜单项被选中的时候,将调用HideSheet过程。






图1 用于表格制表键的标准快捷方式菜单






图2 在Visual Basic Editor中工作。AddToPlyMenu过程向Excel的工作表格制表键菜单添加两个命令

msoBarType Constant Example Description

msoBarTypeNormal Standard, Format, etc. The familiar "menu bar." 

msoBarTypeMenuBar Worksheet Menu Bar and Chart Menu Bar Used for creating custom CommandBars.

msoBarTypePopup Ply, Cell, Row, Column, etc. Popup or "Shortcut" menus, displayed by right-clicking.

图3 CommandBar类型

添加功能

  我们已经创建了两项功能。下面让我们来从隐藏选定工作簿表格的过程开始。只需向包含有AddToPlyMenu过程的模块添加简单的、单语句的过程即可。

Sub HideSheet()

 ActiveWindow.SelectedSheets.Visible = False

End Sub

这就是我们添加的全部内容。当运行这个过程的时候,所有被选中的表格将自动隐藏起来。一定要记住,文件中至少应有一个电子表格保持可见。因此,如果你试图隐藏文件中全部电子表格的时候,VBA将返回一个错误。


 

尽管隐藏表格的过程十分简单,而相应的再现表格的过程就要复杂一些了。为了开始,你必须创建一个用户表单,这可以通过在Project Explorer窗口中右击VBA Project (PERSONAL.XLS),然后选择Insert | UserForm. Change the Name property to UnhideDlg来实现,然后,将Caption属性改为Unhide。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:开发ADOCE搭配WinCE资料存取应用程序(2)

下一篇:怎样把VC 代码转换成VB代码