打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【跟我学Excel VBA】第十六课:不懂功能区代码也能在功能区中添加按钮

        开始今天的课程之前,首先发一个图片:



        对:进销存系统!


        但是,今天的主题不是进销存系统,也不是功能区开发,而是功能区上面的那些按钮。但是,我想说的是,即使不用功能区开发,我们也能做出类似于功能区的按钮来。如下图所示:



        那么,这样的按钮是怎样做出来的呢?下面我们来看代码:



        为了节约空间,我们只截取了部分按钮的代码。下面,我将对代码进行解释:


        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及以下版本开发的。不过这些功能同样适用于新版本而已。当然,要想在新版本中做出好看的按钮来,还得功能区开发,这些以后我们择机介绍。


        另外,我们想要这个添加按钮代码能在文件开启的时候自动加载,关闭的时候自动取消,可以在模块中添加以下代码:


       当然,如果想这些按钮,用于所有的工作簿,那么你可以将此文件另存为加载宏就行了,这里就不介绍了。


        顺便给大家拜个年,祝大家在新的一年中大展宏图,天天开心!!




本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
显示所有EXCEL按钮图标及对应编号-FaceID
VBA常用代码解析(第二十三讲)
VBA Excel 创建菜单栏 工具栏
vba如何去屏蔽一些功能?看完这些代码你应该会得到启发!
鼠标移动弹出提示框信息
Excel 2007教程:对中老式工具栏的限制
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服