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

标签:
office技巧vbait |
分类: 技术交流 |
很多朋友在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