加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

用VBA定制个性化的工具栏按钮

(2013-12-13 08:11:48)
标签:

office技巧

vba

it

分类: 技术交流

很多朋友在Excel中开发的应用都是用命令按钮或者通过“工具”菜单中的“宏”来启动执行的,能不能把用户定义的宏过程用类似于Excel中的工具栏按钮来启动呢?这样用户在使用时也会觉得很方便。

利用CommandBar对象,我们可以在不改变Excel系统菜单的前提下新建一个工具栏。假设要建立一个名“库存管理”的工具栏,工具栏中有“商品入库”、“商品出库”和“库存打印”3个按钮,因此在当前工作薄的“Open”事件中可编写下面的代码:

Private Sub Workbook_Open()

On Error Resume Next

Dim mynum As Integer, myname As String, mycom As String

'如果存在同名的工具栏则将其删除

Application.CommandBars("库存管理").Delete

'在工作表顶部创建名为库存管理的工具栏

Application.CommandBars.Add(Name:="库存管理", _

Position:=msoBarTop).Visible = True

'分别添加3个按钮并设置按钮格式

myname = "商品入库": mycon = "rk": mynum = 1

Call cmdstyle(myname, mynum, mycon)

myname = "商品出库": mycon = "ck": mynum = 2

Call cmdstyle(myname, mynum, mycon)

myname = "库存打印": mycon = "dy": mynum = 3

Call cmdstyle(myname, mynum, mycon)

End Sub

工作簿在打开时首先会检查当前有没有名为“库存管理”的工具栏,如有则将其删除。接下来在工作表的顶端重新创建一个名为“库存管理”的工具栏,然后向工具栏分别添加3个命令按钮。

为了使添加的按钮具有统一的风格,我们可以在当前工作薄中插入一个模块,在模块中定义一个名为“cmdstyle”的过程以便统一调用。过程“cmdstyle”的代码如下:

Public Sub cmdstyle(myname, mynum, mycom)

'按钮格式的设置

Set newbutton = CommandBars("库存管理").Controls. _

Add(Type:=msoControlButton, before:=mynum)

With newbutton

.Style = msoButtonCaption

.BeginGroup = True

.Caption = myname

.Width = 60

.OnAction = mycom

End With

End Sub

关闭代码窗口返回到Excel工作表中,保存并关闭当前的工作薄。当我们重新打开该工作薄时,就可以看到最终的效果了(如图)。此时单击这些按钮还不能执行,这是因为代码中给这些工具按钮指定的过程“rk”、“ck”和“dy”还没有具体定义,用户可在模块中根据需要分别定义这3个过程的代码就可以了。

如果你想在关闭当前工作薄的同时删除创建的工具栏,可在当前工作薄的“BeforeClose”事件中写上代码“Application.CommandBars("库存管理").Delete”的代码,这样用户创建的工具栏就可以定制给指定的工作薄了。

 

http://s4/mw690/002dd1pegy6EX7tDpjd83&690



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有