ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 25159|回复: 79

[分享]自己的菜单自己做!9月15日更新!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-4-9 00:24 | 显示全部楼层 |阅读模式

自己的菜单自己做

各位E友在制作各种小程序时,一定考虑到在EXCEL里用自己的菜单来代替原有的菜单来修饰程序,论坛里也有不少这样的例子,恰巧我也在学习这方面的知识,就把它整理一下,算是和大家共同学习了。

说到菜单的制作,大家一定要知道菜单实际上使用了三个对象:包容器、菜单和菜单项。包容器跟工具栏中的一样,叫做命令栏,也叫做菜单栏,位于命令栏中的就是菜单。菜单有“文件”、“编辑”、“帮助”菜单等等,每个菜单中内容的就是菜单项,比如,“文件”菜单包含了像“打开”、“保存”和“打印”之类的菜单项(或者叫做菜单命令),理解了以上内容就好办了。

但在制作真正的自己的菜单前,大家最好要熟悉用手工方式来自定义菜单的方法。这样的好处是我们可以自己录制宏,取得我们需要的各种方法属性。那么现在就开始用手工方式来自定义菜单吧。打开一个新的工作薄,进行以下步骤:

1)打开一个新工作簿。

2)用鼠标右键单击菜单栏,从弹出的菜单中选择“自定义”,“自定义”对话框显示出来。

3)选择“命令”选项卡,就显示了可以使用的菜单类别和命令的列表。

4)在“类别”列表框中,找到并选择“新菜单”,在“命令”列表框中,就将看到“新

菜单”。

5)从“命令”列表框中拖拉“新菜单”。我们准备把“新菜单”放置在“数据”和“窗

口”菜单之间,当定位合适时,就能够看到这两个菜单之间将出现黑色的竖条。

6)释放鼠标键,把菜单放置到新位置上。

7)添加了这个菜单以后,下一步是重新给新菜单命名。用鼠标右键单击“新菜单”,选

择“名称”,输入计划作为该菜单的名称。

8)下一步是添加一个新的菜单项到计划菜单中。再次从“命令”列表框中选择“新菜

单”,把它拖到计划菜单。当拖到该菜单上时,
  
计划菜单下面就显示出一个灰色框,把新菜单拖到这个框中。当定位合适时,这个框中将显示一条竖直方向的黑线,

9)用鼠标右键单击“新菜单”,选择“重新命名”。

1 0)输入& 执行作为名称。

11)现在可以准备给执行菜单项指定宏了。用鼠标右键单击执行,从弹出的菜单中选择“指定宏”,“指定宏”对话框显示出来。

1 2)选择任意的宏,然后单击“确定”按钮。

1 3)单击“关闭”按钮来关闭“自定义”对话框。

关闭“自定义”对话框以后,就可以准备使用新菜单了。

以上就是手工方式来自定义菜单的方法,但手工方式的菜单会一直留在菜单栏里,对不熟悉EXCEL的人来说,容易造成误操作,所以下面我们就开始通过编程方式来添加使用菜单。

Q5OMrgRr.rar (6.38 KB, 下载次数: 1680)
更新在18楼!
[此贴子已经被作者于2007-9-15 20:12:47编辑过]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-9 00:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

我们先熟悉一些理论的东西,因为理论指导实践吗!呵呵

使用V B A代码来添加菜单跟添加工具栏非常相似。实际上是把菜单项添加到跟工具栏共

用的集合,也就是叫做Command Bars的集合中。添加菜单栏的基本语法如下:

CommandBars.Add ( Name, Position, MenuBar, Temporary )

Name参数指定了命令栏的名称。令人惊奇的是, Name参数居然是可选的。如果没有给

这个参数提供值的话,系统就会给这个命令栏分配一个默认的名称,比如Custom1

Position(位置)是另外一个可选的参数,这个参数允许选择新命令栏的位置或者类型。

因为下面要创建的是菜单栏,所以需要把MenuBar参数设置为True。把这个参数设置为

True就用新命令栏取代了当前活动的菜单栏。该参数的默认值是False

最后一个参数是Temporary(临时的),它也是可选的。把这个参数设置为True就使得新

命令栏成为临时的。临时命令栏在包容器应用程序关闭时被删除。这个参数的默认值是Fals e。在你的应用程序中,也许想要把这个参数设置为True,这样就不会把新增加的临时菜单栏遗留在Excel环境中。

现在开始学习菜单:我们即将创建新菜单,并显示新菜单来取代工作表菜单。要创建自

定义菜单的话,关闭所有打开的工作簿,然后打开一个新工作簿,按下A l t + F 11切换到Vi s u a lB a s i c编辑器,在这个新工作簿中插入一个模块,接下来请执行下面的步骤:

1)创建一个新过程,命名为My First Menubar

2)在这个新过程中输入下面的代码:

Dim mybar As CommandBar

Set mybar = CommandBars.Add(Name: ="计划", _

Position: = msoBarTop, MenuBar:=True, temporary:=True )

mybar.Visible = True

Command Bars ( " Worksheet Menu Bar").Visible = False

3)另外创建一个过程,命名为UndoMyMenu

4)在这个过程中输入下面的代码:

CommandBars ( "计划" ). Delete

5)切换回工作簿,在Sheet1上创建一个命令按钮,把宏过程M y First Menubar分配给这个

命令按钮,并把按钮的标题设置为“计划菜单”。

6)另外创建一个命令按钮,把宏过程Uodo My Menu分配给它,并把它的标题设置为“删除菜单”。

TA的精华主题

TA的得分主题

发表于 2007-4-9 00:29 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-9 00:29 | 显示全部楼层

7)单击计划菜单按钮,就显示出一个空菜单来取代默认的工作表菜单。

8)单击删除菜单按钮,工作表菜单又恢复了。

完成了上面介绍的这些步骤以后,你已经知道怎样显示自定义的和内置的菜单了。刚才

使用VBA代码不但显示了一个自定义菜单,也创建了该自定义菜单。

下面将上面的代码做一下详细的解释:

代码解释:

在这个过程中所做的第一件事情是创建了一个对象变量,这个对象变量在用来创建菜单

栏的A d d方法时进行赋值:

Dim mybar As CommandBar

Set mybar = CommandBars.Add(Name: ="计划", _

Position: = msoBarTop, MenuBar:=True, temporary:=True )

菜单栏创建以后,通过把Visible属性设置为True来显示它,同时也把工作表菜单栏的这

个属性设置为False,以便不显示工作表的菜单栏。

mybar. Visible = True

CommandBars ( " Worksheet Menu Bar "). Visible = False

今天就到这里,如果大家有兴趣的话我将继续和大家学习探讨如何添加菜单和菜单项

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-9 00:31 | 显示全部楼层

添加菜单和菜单项

创建菜单的下一步是添加菜单和菜单栏。要实现这一点的话,将使用Controls集合的Add方法:Name Of Menu. Controls. Add( Type, Id, Parameter, Before, Temporary )你很可能已经猜测到, Name Of Menu需要用要添加的菜单名称来替换,而Type参数对于菜单而言,取值应该是msoControl Popup。参数I d的取值取决于要添加的菜单类型。如果添加的是自定义菜单,那么Id取值应该为1。如果是内置菜单,那么Id取值应该是一个整数,这个整数指定了所希望的菜单。那么,怎样去找到哪个菜单对应哪个整数呢?实际上,最简单的方式是开始录制一个宏,把需要向菜单栏添加的菜单添加进去,记录的菜单就拥有了所需要的那个整数值。

Parameter参数可选,它的取值取决于要使用的菜单类型。如果是内置菜单,那么很可能

就不需要提供该参数的值。如果是自定义菜单,就可以使用这个参数来把信息发送到Visua lB asic过程中。还可以利用这个参数来存储控件的有关信息。

Before参数也可选,它的取值是一个代表菜单栏上新控件位置的数字。菜单(或者菜单项)

将插入到位于所提供位置上的那个控件的前面。如果没有给该参数提供值的话,菜单或者菜

单项就添加到最后。

如果想要菜单或者菜单项成为临时的,那么就应该把可选参数Temporary的值设置为True。该参数的默认值是False

有时候,可能想要自定义自己的菜单,以便能够启动简单的过程,下面的练习将介绍怎

样实现这一点,将添加“文件”菜单和一个自定义菜单到计划菜单栏上。首先,需要修改My FirstMenu过程以添加菜单到菜单栏上,然后将添加菜单项到菜单中。现在修改

My FirstMenu

 Dim mybar As CommandBar

Dim mymenu As Object

Dim mymenuitem As Object

Dim mymenu As Object

Dim mymenuitem As Object

 Dim mybar As CommandBar

Dim mymenu As Object

Dim mymenuitem As Object

Dim mymenu As Object

Dim mymenuitem As Object

Dim mybar As CommandBar

Set mybar = CommandBars.Add(Name: ="计划", _

Position: = msoBarTop, MenuBar:=True, temporary:=True )

 

 

mybar.Controls.Add Type:=msoControlPopup, ID:=30002,Before:=1

Set mymenu = mybar. Controls. Add ( Type:=msoControlPopup, _

Temporary : = True )

mymenu.Caption = "计划"

Set mymenuitem = mymenu.Controls.Add(Type : = msoControlButton , ID : = 1 )

mymenuitem.Caption = "执行"

mymenuitem.Style = msoButtonCaption

mymenuitem.OnAction = "ShowMe"

 

 

mybar.Visible = True

Command Bars ( " Worksheet Menu Bar").Visible = False

 

 

我们需要创建一个新过程,在这个例子中,把它命名为ShowMe。在这个新过程中输入下

面的代码:

MsgBox " 我成功了! "

现在让我们来试验我们做的菜单。


TLTG9P6l.rar (7.53 KB, 下载次数: 749)
[此贴子已经被作者于2007-4-9 19:29:19编辑过]

y8WyGMNl.rar

7.49 KB, 下载次数: 509

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-9 00:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

现在,我们花一些时间来分析对My FirstMenu过程所做出的修改。可以看到代码首先创建

了两个新的对象变量:

Dim mymenu As Object

Dim mymenuitem As Object

过程中下一行新修改的代码添加了“文件”菜单。“文件”菜单是这个菜单栏上的第一个菜单,所以Before参数的取值是1

mybar. Controls. Add Type := msoControlPopup, ID := 30002, Before :=1

下一个添加的菜单是自定义类型的:

Set mymenu = mybar. Controls. Add ( Type := msoControlPopup,_Temporary := Tr u e )

mymenu.Caption = "计划"

添加了自定义菜单以后,又添加了一个自定义菜单项:

Set mymenuitem = mymenu. Controls. Add ( Type := msoControlButton, ID :=1)

自定义菜单项需要设置它的几个属性,
   C a p t i o n
属性的取值就是显示的菜单项文本Style(样式)设置为msoButtonCaption是因为这个菜单项只有显示的文本。菜单项是没有与之相关联的图标的。OnAction属性设置了当菜单项选中时需要运行的那个过程:

mymenuitem. Caption = " 执行"

mymenuitem. Style = msoButtonCaption

mymenuitem. OnAction = " ShowMe"

现在,你已经知道怎样向菜单栏上添加菜单和菜单项了,不管是添加菜单还是菜单项,

都要使用Controls集合,关键是要明白把控件添加到哪种类型的对象中去。添加菜单时,是把控件添加到菜单栏上。而添加菜单项时,是把控件添加到菜单中。

那么如果我们不想自己创建菜单栏,而是想把菜单项直接添加到EXCEL自带的菜单栏中呢?先让我们录制一个宏来得到我们想要的参数。

开始录制一个宏,把需要向菜单栏添加的菜单添加进去

要添加内置菜单到菜单栏的话,用鼠标右键单击菜单栏,从弹出的菜单中选择“自定义”,切换到“命令”选项卡页。在“类别”列表框中,找到并选择“新菜单”,在“命令”列表框中,就将看到“新菜单”,从“命令”列表框中拖拉“新菜单”。我们准备把“新菜单”放置在菜单最后,释放鼠标键,把菜单放置到新位置上。再次从“命令”列表框中拖拉“新菜单”并放到刚才放的新菜单中形成菜单项,然后关闭宏录制。

打开刚才录制的宏得到以下代码:

Application.CommandBars("Worksheet Menu Bar").Controls.Add Type:= _

        msoControlPopup, Before:=11

    Application.CommandBars("Custom Popup 5074997").Controls.Add Type:= _

        msoControlPopup, Before:=1

 

结合上面的代码修改如下:

 

Public Sub MyFirstMenubar2()

Dim mybar As CommandBar

Dim mymenu As Object

Dim mymenuitem As Object

 

Set mymenu = CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup, ID:=1, Before:=11, Temporary:=True)

mymenu.Caption = "切料计划"

Set mymenuitem = mymenu.Controls.Add(Type:=msoControlButton, ID:=1)

 

mymenuitem.Caption = "执行"

mymenuitem.Style = msoButtonCaption

mymenuitem.OnAction = " ShowMe "

End Sub

 

再切换回工作簿,在Sheet1上创建一个命令按钮,把宏过程MyFirstMenubar2分配给这个

命令按钮,并把按钮的标题设置为“计划菜单2”。执行“计划菜单2”就得到了我们想要的结果!

以上就是怎样添加制作自己的菜单,希望能给各位E友点启发!谢谢关注!!!

uHCiGjzX.rar (8.77 KB, 下载次数: 794)
[此贴子已经被作者于2007-4-9 19:59:38编辑过]

TA的精华主题

TA的得分主题

发表于 2007-4-9 00:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢分享,期待下文。

TA的精华主题

TA的得分主题

发表于 2007-4-9 06:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢分享

TA的精华主题

TA的得分主题

发表于 2007-4-9 08:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢楼主分享

TA的精华主题

TA的得分主题

发表于 2007-4-9 09:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢分享
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-18 22:23 , Processed in 0.056085 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表