开始今天的课程之前,首先发一个图片:
对:进销存系统!
但是,今天的主题不是进销存系统,也不是功能区开发,而是功能区上面的那些按钮。但是,我想说的是,即使不用功能区开发,我们也能做出类似于功能区的按钮来。如下图所示:
那么,这样的按钮是怎样做出来的呢?下面我们来看代码:
为了节约空间,我们只截取了部分按钮的代码。下面,我将对代码进行解释:
1、On Error Resume Next:在错误发生的时候,继续执行;
2、Application.CommandBars('库存管理工具栏').Delete,将原有的“库存管理工具栏”删除,如果不存在,会报错;
3、Set 工具栏 = Application.CommandBars.Add:新建一个工具栏;
4、 Set 命令按钮 = .Controls.Add:在工具栏中新建一个按钮;
5、.Caption = '保存':新建按钮的名称为“保存”;
6、 .FaceId = 3:新建按钮图标的ID为3;
7、.OnAction = '保存':点击此按钮,将触发模块中的名为“保存”的宏代码;
8、从 Set 命令按钮 = .Controls.Add开始的语句可以重复使用,用于建立不同功能的按钮。
那么,我们怎样才能找到对应的FaceId呢,我们可以用以下代码来完成:
Sub ShowFaceIDs()
Dim NewToolbar As CommandBar
Dim ctl As CommandBarButton
Dim ID_Start As Integer, ID_End As Integer
Dim TopPos As Long, LeftPos As Long
Dim i As Long, Count As Long
On Error Resume Next
ID_Start = 1 '获取ID的起始和终止值
ID_End = 1000
If Err.Number <> 0 Or (ID_Start > ID_End) Then
MsgBox 'Error - check the ID values', vbCritical
Exit Sub
End If
On Error Resume Next
Application.CommandBars('TempFaceIds').Delete '如果临时菜单存在,删除之
On Error GoTo 0
ActiveSheet.Pictures.Delete '清空所有图标
Application.ScreenUpdating = False
Set NewToolbar = Application.CommandBars.Add _
(Name:='TempFaceIds', temporary:=True)
NewToolbar.Visible = True '添加一个心的命令栏
TopPos = 60 '设置图形放置的位置上端位置
LeftPos = 16 '设置图形的左边位置
Count = 1
For i = ID_Start To ID_End
On Error Resume Next
NewToolbar.Controls(1).Delete '删除工具栏的第一个命令命令按钮
On Error GoTo 0
Set ctl = NewToolbar.Controls.Add(Type:=msoControlButton)
ctl.FaceId = i
ctl.CopyFace '添加新的按钮,复制图标
ActiveSheet.Paste '粘贴到当前工作表中
With ActiveSheet.Shapes(Count) '设置该图标的位置 名称 图片格式样式等
.Top = TopPos
.Left = LeftPos
.Name = 'FaceID ' & i
.PictureFormat.TransparentBackground = True '图片
.PictureFormat.TransparencyColor = RGB(224, 223, 227) '图片的透明色
.Fill.Visible = False
End With
LeftPos = LeftPos 16 '添加完成后 位置向右移动
If Count Mod 40 = 0 Then
TopPos = TopPos 16 '每行40个图标,然后向下移动一行16个单位
LeftPos = 16
End If
Count = Count 1
Next i
ActiveWindow.RangeSelection.Select
Application.CommandBars('TempFaceIds').Delete '删除临时工具栏
End Sub
因为此代码可以直接复制使用,我就不解释具体意思了。唯一需要注意的是,可以更改起始值和结束值,此处是1-1000序号的ID图片,以下是结果图:
那些图标看起来是灰色的,就表示那个序号是没有内置的图标的;另外,结果值是从到右,从上到下的顺序排列的。
事实上,这些功能是为2003及以下版本开发的。不过这些功能同样适用于新版本而已。当然,要想在新版本中做出好看的按钮来,还得功能区开发,这些以后我们择机介绍。
另外,我们想要这个添加按钮代码能在文件开启的时候自动加载,关闭的时候自动取消,可以在模块中添加以下代码:
当然,如果想这些按钮,用于所有的工作簿,那么你可以将此文件另存为加载宏就行了,这里就不介绍了。
顺便给大家拜个年,祝大家在新的一年中大展宏图,天天开心!!
联系客服