Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4183|回复: 15

[已解决]自定义菜单和工具栏

[复制链接]
发表于 2014-4-24 22:49 | 显示全部楼层 |阅读模式
本帖最后由 张雄友 于 2014-4-24 23:38 编辑

Application.CommandBars("我的工具栏").Delete '这句不产生作用,每次都没有把前一次的工具删除的???????????
最佳答案
2014-4-24 23:29
  1. Sub 添加工具栏()
  2.     On Error Resume Next
  3.     Application.CommandBars("我的工具栏1").Delete    '这句不产生作用,每次都没有把前一次的工具删除的???????????
  4.     Application.CommandBars("我的工具栏2").Delete
  5.     Application.CommandBars("我的工具栏3").Delete
  6.     Dim 工具栏 As CommandBar, 命令按钮 As CommandBarControl, 子菜单 As CommandBarControl
  7.     Dim m1 As Integer, myarray1 As Variant, myarray2 As Variant

  8.     myarray1 = Array("数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查")
  9.     myarray2 = Array("263", "264", "265", "266", "267", "268", "269", "270", "271", "272")


  10.     Set 工具栏 = Application.CommandBars.Add
  11.     With 工具栏
  12.         .Name = "我的工具栏1"
  13.         .Position = msoBarTop
  14.         .Visible = True
  15.         For m1 = 1 To UBound(myarray1) + 1
  16.             Set 命令按钮 = .Controls.Add
  17.             With 命令按钮
  18.                 .Caption = myarray1(m1 - 1)
  19.                 .FaceId = myarray2(m1 - 1)
  20.                 .OnAction = myarray1(m1 - 1)
  21.                 .Style = msoButtonIconAndCaptionBelow
  22.             End With
  23.         Next
  24.     End With

  25.     myarray1 = Array("数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查")
  26.     myarray2 = Array("263", "264", "265", "266", "267", "268", "269", "270", "271", "272")


  27.     Set 工具栏 = Application.CommandBars.Add
  28.     With 工具栏
  29.         .Name = "我的工具栏2"
  30.         .Position = msoBarTop
  31.         .Visible = True
  32.         For m1 = 1 To UBound(myarray1) + 1
  33.             Set 命令按钮 = .Controls.Add
  34.             With 命令按钮
  35.                 .Caption = myarray1(m1 - 1)
  36.                 .FaceId = myarray2(m1 - 1)
  37.                 .OnAction = myarray1(m1 - 1)
  38.                 .Style = msoButtonIconAndCaptionBelow
  39.             End With
  40.         Next
  41.     End With

  42.     myarray1 = Array("数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查")
  43.     myarray2 = Array("263", "264", "265", "266", "267", "268", "269", "270", "271", "272")


  44.     Set 工具栏 = Application.CommandBars.Add
  45.     With 工具栏
  46.         .Name = "我的工具栏3"
  47.         .Position = msoBarTop
  48.         .Visible = True
  49.         For m1 = 1 To UBound(myarray1) + 1
  50.             Set 命令按钮 = .Controls.Add
  51.             With 命令按钮
  52.                 .Caption = myarray1(m1 - 1)
  53.                 .FaceId = myarray2(m1 - 1)
  54.                 .OnAction = myarray1(m1 - 1)
  55.                 .Style = msoButtonIconAndCaptionBelow
  56.             End With
  57.         Next
  58.     End With


  59.     Set 子菜单 = CommandBars("我的工具栏1").Controls.Add(Type:=msoControlPopup)    ', before:=4, temproray:=True)
  60.     子菜单.Caption = "排序方式"
  61.     myarray1 = Array("单条件排序", "多条件排序")
  62.     myarray2 = Array("654", "541")
  63.     With 子菜单
  64.         For m1 = 1 To UBound(myarray1) + 1
  65.             Set 命令按钮 = .Controls.Add
  66.             With 命令按钮
  67.                 .Caption = myarray1(m1 - 1)
  68.                 .FaceId = myarray2(m1 - 1)
  69.                 .OnAction = myarray1(m1 - 1)
  70.             End With
  71.         Next
  72.     End With


  73.     Set 子菜单1 = CommandBars("我的工具栏2").Controls.Add(Type:=msoControlPopup)
  74.     子菜单1.Caption = "发送"
  75.     myarray1 = Array("选择联系人", "添加联系人", "发送至桌面")
  76.     myarray2 = Array("361", "362", "69")
  77.     With 子菜单1
  78.         For m1 = 1 To UBound(myarray1) + 1
  79.             Set 命令按钮 = .Controls.Add
  80.             With 命令按钮
  81.                 .Caption = myarray1(m1 - 1)
  82.                 .FaceId = myarray2(m1 - 1)
  83.                 If m1 - 1 = 2 Then .BeginGroup = True
  84.                 .OnAction = myarray1(m1 - 1)
  85.             End With
  86.         Next
  87.     End With

  88.     Set 命令按钮 = Nothing: Set 工具栏 = Nothing: Set 子菜单 = Nothing
  89. End Sub
复制代码

2010菜单工具.rar

26.39 KB, 下载次数: 8

发表于 2014-4-24 23:06 | 显示全部楼层
你后面再创建的名字不能再用我的工具栏,要么直接添加controls,重名了。
你把on error resume next注释后,就会发现.name设置已经出错了。
回复

使用道具 举报

 楼主| 发表于 2014-4-24 23:08 | 显示全部楼层
hwc2ycy 发表于 2014-4-24 23:06
你后面再创建的名字不能再用我的工具栏,要么直接添加controls,重名了。
你把on error resume next注释后 ...

比如说?你后面再创建的名字不能再用我的工具栏
回复

使用道具 举报

发表于 2014-4-24 23:09 | 显示全部楼层
  1. Sub demo2()
  2.     Dim cb As CommandBar
  3.     For Each cb In Application.CommandBars
  4.         If Not cb.BuiltIn Then
  5.             Debug.Print cb.Name
  6.         End If
  7.     Next
  8. End Sub
复制代码
代码执行你看立即窗口打印的工具栏名称(非内置)
回复

使用道具 举报

发表于 2014-4-24 23:12 | 显示全部楼层
张雄友 发表于 2014-4-24 23:08
比如说?你后面再创建的名字不能再用我的工具栏

名字是从集合中返回某个指定对象的一个索引方式,如果有两个重名的,该返回哪一个。
工作表集合中就是如此,同一个工作簿中,没有两个工作表的名字是相同的吧。

回复

使用道具 举报

 楼主| 发表于 2014-4-24 23:12 | 显示全部楼层
hwc2ycy 发表于 2014-4-24 23:09
代码执行你看立即窗口打印的工具栏名称(非内置)

这么深奥的看不懂,代码怎么修改才能让其运行,并将前一次生成的删除掉???
回复

使用道具 举报

发表于 2014-4-24 23:14 | 显示全部楼层
张雄友 发表于 2014-4-24 23:12
这么深奥的看不懂,代码怎么修改才能让其运行,并将前一次生成的删除掉???

3个你就1,2,3嘛,或者全在一个工具栏里,添加CONTROLS就成了。

评分

参与人数 1 +3 收起 理由
张雄友 + 3 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-4-24 23:16 | 显示全部楼层
hwc2ycy 发表于 2014-4-24 23:14
3个你就1,2,3嘛,或者全在一个工具栏里,添加CONTROLS就成了。

搞了5个小时,头晕了。没头绪了。难道是:

  With 工具栏1
       .Name = "我的工具栏1"


  With 工具栏2
       .Name = "我的工具栏2"



  With 工具栏3
       .Name = "我的工具栏3"



回复

使用道具 举报

发表于 2014-4-24 23:20 | 显示全部楼层
张雄友 发表于 2014-4-24 23:16
搞了5个小时,头晕了。没头绪了。难道是:

  With 工具栏1

是的。


回复

使用道具 举报

 楼主| 发表于 2014-4-24 23:21 | 显示全部楼层
本帖最后由 张雄友 于 2014-4-24 23:23 编辑
hwc2ycy 发表于 2014-4-24 23:20
是的。

不行啊,无效的参数调用。
  1. Sub 添加工具栏()
  2. 'On Error Resume Next
  3. Application.CommandBars("我的工具栏1").Delete '这句不产生作用,每次都没有把前一次的工具删除的???????????
  4. Application.CommandBars("我的工具栏2").Delete '这句不产生作用,每次都没有把前一次的工具删除的???????????
  5. Application.CommandBars("我的工具栏3").Delete '这句不产生作用,每次都没有把前一次的工具删除的???????????

  6. Dim 工具栏 As CommandBar, 命令按钮 As CommandBarControl, 子菜单 As CommandBarControl
  7. Dim m1 As Integer, myarray1 As Variant, myarray2 As Variant

  8. myarray1 = Array("数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查")
  9. myarray2 = Array("263", "264", "265", "266", "267", "268", "269", "270", "271", "272")


  10. Set 工具栏 = Application.CommandBars.Add
  11.   With 工具栏1
  12.        .Name = "我的工具栏1"
  13.        .Position = msoBarTop
  14.        .Visible = True
  15.     For m1 = 1 To UBound(myarray1) + 1
  16.      Set 命令按钮 = .Controls.Add
  17.        With 命令按钮
  18.          .Caption = myarray1(m1 - 1)
  19.          .FaceId = myarray2(m1 - 1)
  20.          .OnAction = myarray1(m1 - 1)
  21.          .Style = msoButtonIconAndCaptionBelow
  22.        End With
  23.     Next
  24. End With

  25. myarray1 = Array("数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查")
  26. myarray2 = Array("263", "264", "265", "266", "267", "268", "269", "270", "271", "272")


  27. Set 工具栏 = Application.CommandBars.Add
  28.   With 工具栏2
  29.        .Name = "我的工具栏2"
  30.        .Position = msoBarTop
  31.        .Visible = True
  32.     For m1 = 1 To UBound(myarray1) + 1
  33.      Set 命令按钮 = .Controls.Add
  34.        With 命令按钮
  35.          .Caption = myarray1(m1 - 1)
  36.          .FaceId = myarray2(m1 - 1)
  37.          .OnAction = myarray1(m1 - 1)
  38.          .Style = msoButtonIconAndCaptionBelow
  39.        End With
  40.     Next
  41. End With

  42. myarray1 = Array("数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查", "数据库检查")
  43. myarray2 = Array("263", "264", "265", "266", "267", "268", "269", "270", "271", "272")


  44. Set 工具栏 = Application.CommandBars.Add
  45.   With 工具栏3
  46.        .Name = "我的工具栏3"
  47.        .Position = msoBarTop
  48.        .Visible = True
  49.     For m1 = 1 To UBound(myarray1) + 1
  50.      Set 命令按钮 = .Controls.Add
  51.        With 命令按钮
  52.          .Caption = myarray1(m1 - 1)
  53.          .FaceId = myarray2(m1 - 1)
  54.          .OnAction = myarray1(m1 - 1)
  55.          .Style = msoButtonIconAndCaptionBelow
  56.        End With
  57.     Next
  58. End With
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 03:51 , Processed in 0.500864 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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