ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3193|回复: 8

工具栏→下拉菜单的工作方法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-9-30 07:11 | 显示全部楼层 |阅读模式
http://club.excelhome.net/thread-631687-1-1.html
小结了一下其要点为:
1 Set 工具列 = Application.CommandBars.Add(Name:=工具列名稱, Position:=msoBarTop, Temporary:=True)
2 Set 按鈕 = 工具列.Controls.Add(Type:=msoControlButton, Temporary:=True)
3  Set 新功能表按鈕 = 工具列.Controls.Add(Type:=msoControlPopup, Temporary:=True)

调试了几次总是有问题。
目标需求,将附件示例再简化一下,工具栏中三个按钮→1按钮,这个按钮有下拉菜单。
Temp.JPG

带下拉菜单的工具栏.rar

9.85 KB, 下载次数: 100

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-9-30 12:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Position:=msoBarTop, Temporary:=True→好理解。
Type:=msoControlButton, Temporary:=True→基本理解
Type:=msoControlPopup, Temporary:=True→这个弯转不过来

如何定义msoControlButton赋值→msoControlPopup的赋值关系。

请各位大侠解决的问题见图

看原程序没问题,自己重做一遍,一个小弯老是拐不过来。

Temp.JPG

Book1.rar (7.27 KB, 下载次数: 30)

[ 本帖最后由 ningyong58 于 2010-9-30 15:57 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-9-30 12:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
弹出式控件

TA的精华主题

TA的得分主题

发表于 2010-9-30 20:19 | 显示全部楼层
没有2003的excel,调试不了,给楼主一个4级菜单的,看有没有帮助。

Excel多级菜单_弹出的菜单达到4级_PopupMenu.zip

20.33 KB, 下载次数: 160

TA的精华主题

TA的得分主题

发表于 2010-9-30 20:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我的理解就是msoControlPopup型的包含msoControlButton型的,前者是后者的父级。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-9-30 21:18 | 显示全部楼层
原帖由 lb_bn 于 2010-9-30 20:21 发表
我的理解就是msoControlPopup型的包含msoControlButton型的,前者是后者的父级。


谢谢,使用的示例都是 as object.
看了这个帖子思路逐渐清晰。msoControlPopup型的包含msoControlButton型
''''
  1. Dim myPop As CommandBarPopup
  2.     Dim myBtn As CommandBarButton
  3.     Dim Pop() As CommandBarPopup
  4.     Dim Pop1() As CommandBarPopup
  5. 新图片.jpg
  6. Sub ls()
  7.   On Error Resume Next
  8.   
  9.     Dim i As Long
  10.     CommandBars("tempBar").Delete
  11.     Dim oBar As CommandBar
  12.     Set oBar = Application.CommandBars.Add("tempBar", msoBarPopup, , True)
  13.     With oBar
  14.       .Height = 500
  15.       .Width = 400
  16.       .Visible = True
  17.       
  18.     End With
  19.     ''
  20.     Dim oPop As CommandBarPopup
  21.     Dim oBtn As CommandBarButton
  22.     Dim Pop() As CommandBarPopup
  23.     Dim Pop1() As CommandBarPopup
  24.     ''
  25.     Set oPop = oBar.Controls.Add(msoControlPopup, , , , True) '  oBar.Controls.Add(msoControlPopup, , , , True)
  26.     With oPop
  27.       .Caption = "寺ffffffffff"
  28.       .Visible = True
  29.     End With
  30.     ReDim Pop(0)
  31.     Set Pop(0) = oPop.Controls.Add(msoControlPopup, , , , True)
  32.     With Pop(0)
  33.       .Caption = "fdafdaf"
  34.       .Visible = True
  35.     End With
  36.     'CommandBars("tempBar").ShowPopup
  37. End Sub
  38. ''
  39. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  40.   Dim oBar As CommandBarButton
  41.   CommandBars("tempBar").ShowPopup
  42. End Sub
复制代码
Book1.rar (6.86 KB, 下载次数: 66)

[ 本帖最后由 ningyong58 于 2010-10-2 11:16 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-9-30 21:23 | 显示全部楼层
Set myPop = mybar.Controls.Add(msoControlPopup, , , , True)
                myPop.Caption = .Cells(i, "A")

比这种写法理解起来容易点。
Set 新功能表按鈕 = 工具列.Controls.Add(Type:=msoControlPopup, Temporary:=True)
  1. Sub Create_popup()
  2.     On Error Resume Next
  3.     'Dim i As Byte
  4.     Dim i As Long
  5.     CommandBars("myR").Delete
  6.     Dim mybar As CommandBar
  7.     Set mybar = Application.CommandBars.Add("myR", msoBarPopup, , True)
  8.         mybar.Height = 500
  9.         mybar.Width = 400
  10.         
  11.     Dim myPop As CommandBarPopup
  12.     Dim myBtn As CommandBarButton
  13.     Dim Pop() As CommandBarPopup
  14.     Dim Pop1() As CommandBarPopup
  15.     Dim n As Integer
  16.     Dim n1 As Integer
  17.     n = 1
  18.     n1 = 1
  19.     Dim dc As Object
  20.     Dim dc1 As Object
  21.     Set dc = CreateObject("scripting.dictionary")
  22.     Set dc1 = CreateObject("scripting.dictionary")
  23.    
  24.     With Sheets("商品名称数源")
  25.         For i = 1 To .[a65536].End(3).Row
  26.         'For i = 2 To .[a65536].End(3).Row
  27.         Next
  28.         For i = 1 To .[a65536].End(3).Row
  29.         'For i = 2 To .[a65536].End(3).Row
  30.             If .Cells(i, "A").Font.ColorIndex = 3 Then
  31.                 Set myPop = mybar.Controls.Add(msoControlPopup, , , , True)
  32.                 myPop.Caption = .Cells(i, "A")
  33.                 bl = True
  34.             Else
  35.                 If .Cells(i, "D") <> "" Then
  36.                     If Not dc.exists(.Cells(i, "D").Value) Then
  37.                         dc.Add .Cells(i, "D").Value, n
  38.                         ReDim Preserve Pop(n) As CommandBarPopup
  39.                         Set Pop(n) = myPop.Controls.Add(msoControlPopup, , , , True)
  40.                         Pop(n).Caption = .Cells(i, "D")
  41.                         n = n + 1
  42.                     End If 'If Not dc.exists(.Cells(i, "D").Value)
  43.                   
  44.                     If .Cells(i, "E") <> "" Then
  45.                         If Not dc1.exists(.Cells(i, "E").Value) Then
  46.                             dc1.Add .Cells(i, "E").Value, n1
  47.                             ReDim Preserve Pop1(n1) As CommandBarPopup
  48.                             Set Pop1(n1) = Pop(dc.Item(.Cells(i, "D").Value)).Controls.Add(msoControlPopup, , , , True)
  49.                             Pop1(n1).Caption = .Cells(i, "E")
  50.                             n1 = n1 + 1
  51.                         End If
  52.                         Set myBtn = Pop1(dc1.Item(.Cells(i, "E").Value)).Controls.Add(msoControlButton)
  53.                         myBtn.Caption = .Cells(i, "A")
  54.                         myBtn.HelpFile = .Cells(i, 2) & "," & .Cells(i, 3)
  55.                         myBtn.Style = msoButtonCaption
  56.                         myBtn.OnAction = "myBtn_click"
  57.                     Else
  58.                     
  59.                         Set myBtn = Pop(dc.Item(.Cells(i, "D").Value)).Controls.Add(msoControlButton)
  60.                         myBtn.Caption = .Cells(i, "A")
  61.                         myBtn.HelpFile = .Cells(i, 2) & "," & .Cells(i, 3)   '2010年5月5日:将单价和单位信息保存到按钮的Helpfile属性中,然后在mybtn_click事件中取出。
  62.                         myBtn.Style = msoButtonCaption
  63.                         myBtn.OnAction = "myBtn_click"
  64.                     End If
  65.    
  66.                 Else
  67.                     Set myBtn = myPop.Controls.Add(msoControlButton)
  68.                     myBtn.Caption = .Cells(i, "A")
  69.                     myBtn.HelpFile = .Cells(i, 2) & "," & .Cells(i, 3)   '2010年5月5日:将单价和单位信息保存到按钮的Helpfile属性中,然后在mybtn_click事件中取出。
  70.                     myBtn.Style = msoButtonCaption
  71.                     myBtn.OnAction = "myBtn_click"
  72.                 End If  'If .Cells(i, "D") <> "" Then
  73.             End If  'If .Cells(i, "A").Font.ColorIndex = 3 Then
  74.         Next
  75.     End With
  76.    
  77.     Set myBtn = Nothing
  78.     Set myPop = Nothing
  79.     Set mybar = Nothing
  80.     Set dc = Nothing
  81.     Set dc1 = Nothing
  82.     Erase Pop
  83.     Erase Pop1
  84. End Sub
复制代码

[ 本帖最后由 ningyong58 于 2010-10-2 10:23 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-10-2 18:55 | 显示全部楼层
Set 按鈕 = 新功能表按鈕.CommandBar.Controls.Add(Type:=msoControlButton, Temporary:=True)

我的代碼紅色部分不加不行,為什麼你們可以不用加?

是變數宣告類型不同的關係嗎?

[ 本帖最后由 linyancheng 于 2010-10-2 18:58 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-10-3 09:29 | 显示全部楼层
  1. Sub aaa()

  2.     On Error Resume Next
  3.    
  4.     Dim X As Long
  5.     Dim btnArr As Variant
  6.     Dim oBar As Object
  7.     Dim newBtn As Object
  8.     Dim Btn As Object
  9.     Dim toolName As String
  10.    
  11.     '編輯區,其他部分不須編輯==================================================================================================
  12.     '◎表Btn置於oBar上,否則置於新功能表上
  13.     '★表新功能表銨鈕
  14.     '▲表Btn開始群組,可單獨使用,否則必須緊接在◎、★之後
  15.     '非◎者一定要置於★項目之後
  16.     '陣列元素名稱須為Sub名稱(★項目除外)
  17.    
  18.     btnArr = Array("◎VBA1", "★VBA2", "VBA3", "▲VBA4", "◎▲VBA5", "★▲VBA6", "VBA7", "VBA8", "▲VBA9")
  19.    
  20.     toolName = "myTool"
  21.     Application.CommandBars(toolName).Delete
  22.     '==================================================================================================
  23.    
  24.     Set oBar = Application.CommandBars.Add(Name:=toolName, Position:=msoBarTop, Temporary:=True)
  25.    
  26.     oBar.Visible = True
  27.    
  28.     For X = 0 To UBound(btnArr)
  29.         If Left(btnArr(X), 1) = "◎" Then
  30.             Set Btn = oBar.Controls.Add(Type:=msoControlButton, Temporary:=True)
  31.             
  32.             With Btn
  33.                 .Caption = Replace(btnArr(X), "◎", "")
  34.                 .Caption = Replace(.Caption, "▲", "")
  35.                 .Caption = Replace(.Caption, "Show", "")
  36.                 .Style = msoButtonCaption
  37.                 .OnAction = Replace(btnArr(X), "◎", "")
  38.                 .OnAction = Replace(.OnAction, "▲", "")
  39.                
  40.                 If Not InStr(Left(btnArr(X), 2), "▲") = 0 Then
  41.                     .BeginGroup = True
  42.                 End If
  43.             End With
  44.         ElseIf Left(btnArr(X), 1) = "★" Then
  45.             Set newBtn = oBar.Controls.Add(Type:=msoControlPopup, Temporary:=True)
  46.             
  47.             With newBtn
  48.                 .Caption = Replace(btnArr(X), "★", "")
  49.                 .Caption = Replace(.Caption, "▲", "")
  50.                 .Style = msoButtonCaption
  51.                
  52.                 If Not InStr(Left(btnArr(X), 2), "▲") = 0 Then
  53.                     .BeginGroup = True
  54.                 End If
  55.             End With
  56.         Else
  57.             Set Btn = newBtn.CommandBar.Controls.Add(Type:=msoControlButton, Temporary:=True)
  58.             
  59.             With Btn
  60.                 .Caption = Replace(btnArr(X), "▲", "")
  61.                 .Caption = Replace(.Caption, "Show", "")
  62.                 .Style = msoButtonCaption
  63.                 .OnAction = Replace(btnArr(X), "▲", "")
  64.                
  65.                 If Not InStr(Left(btnArr(X), 2), "▲") = 0 Then
  66.                     .BeginGroup = True
  67.                 End If
  68.             End With
  69.         End If
  70.     Next X

  71. End Sub
复制代码

[ 本帖最后由 ningyong58 于 2010-10-4 08:24 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 14:40 , Processed in 0.055418 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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