Excel精英培训网

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

[已解决]如何封装2003版Excel自定义工作表菜单

[复制链接]
发表于 2013-12-23 10:43 | 显示全部楼层 |阅读模式
本人设计想把2003版Excel自定义工作表菜单封装成DLL,均不成功,按网上下载的一篇文件操作,仍不能引用Sub程序,企盼高手诊断一下网上这篇文章的错漏,不胜感激!!!
最佳答案
2013-12-26 10:55
另外插入一个模块
  1. Option Explicit

  2. Public xlApp As Excel.Application

  3. Public Sub 部门()
  4.     With xlApp
  5.         .Selection.Value = "部门"
  6.     End With
  7. End Sub
  8. Public Sub 工程部()
  9.     With xlApp
  10.         .Selection.Value = "工程部"
  11.     End With
  12. End Sub
  13. Public Sub 生产部()
  14.     With xlApp
  15.         .Selection.Value = "生产部"
  16.     End With
  17. End Sub
  18. Public Sub 组装线()
  19.     With xlApp
  20.         .Selection.Value = "组装线"
  21.     End With
  22. End Sub
  23. Public Sub 包装线()
  24.     With xlApp
  25.         .Selection.Value = "包装线"
  26.     End With
  27. End Sub
  28. Public Sub 签名()
  29.     With xlApp
  30.         .Selection.Value = "签名"
  31.     End With

  32. End Sub
  33. Public Sub 按钮1()
  34.     MsgBox "你按下了按钮1"
  35. End Sub
复制代码

VB6.0封装Excel2003三级菜单DLL.rar

268 KB, 下载次数: 23

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-12-25 13:06 | 显示全部楼层
[已解决]用VB6.0制作 EXCEL自定义菜单(COM加载项)新建E文件E表格问题
http://www.excelpx.com/thread-305767-1-1.html

[已解决]VB中制作COM加载项时,如何添加子菜单
http://www.excelpx.com/thread-305423-1-1.html

[已解决]求助:用VB6.0制作 EXCEL自定义菜单(COM加载项)弹出的窗体中新建E表格问题
http://www.excelpx.com/thread-305807-1-1.html

[已解决]用VB6.0制作 EXCEL自定义菜单(COM加载项)新建E文件E表格问题
http://www.excelpx.com/thread-305779-1-1.html

你参考人家的改下就知道了,这个资料应该漏了那几个按钮的声明了。
回复

使用道具 举报

发表于 2013-12-26 10:50 | 显示全部楼层
本帖最后由 hwc2ycy 于 2013-12-26 10:53 编辑

就写在Connect模块里
  1. Implements IDTExtensibility2
  2. Public xlApp As Excel.Application
  3. Dim WithEvents objButton1 As Office.CommandBarButton
  4. Dim WithEvents objButton2 As Office.CommandBarButton
  5. Dim objButton3 As Office.CommandBarControl
  6. Dim WithEvents objButton4 As Office.CommandBarButton
  7. Dim objButton5 As Office.CommandBarControl
  8. Dim WithEvents objButton6 As Office.CommandBarButton
  9. Dim WithEvents objButton7 As Office.CommandBarButton

  10. Private Sub IDTExtensibility2_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
  11. '相当于Excel的Workbook_Open事件
  12.     Set xlApp = Application
  13.     CreateMenus  '创建2003菜单
  14. End Sub
  15. Private Sub IDTExtensibility2_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
  16. '关闭时或不引用时(断开)  相当于Exce的Workbook_BeforeClose(Cancel As Boolean)事件
  17.     On Error Resume Next
  18.     xlApp.CommandBars("Worksheet Menu Bar").Controls("自定义工具(&K)").Delete
  19. End Sub
  20. Private Sub IDTExtensibility2_OnAddInsUpdate(custom() As Variant)   '占位
  21. End Sub
  22. Private Sub IDTExtensibility2_OnBeginShutdown(custom() As Variant)   '占位
  23. End Sub
  24. Private Sub IDTExtensibility2_OnStartupComplete(custom() As Variant)   '占位
  25. End Sub
  26. Private Sub IDTExtensibility_OnStartupComplete(custom() As Variant)   '占位
  27. End Sub
  28. Private Sub CreateMenus()    '创建自定义工具栏
  29.     On Error Resume Next
  30.     xlApp.CommandBars("Worksheet Menu Bar").Controls("自定义工具(&K)").Delete
  31.     With xlApp.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup, Before:=11)  '创建一个新工具栏
  32.         .Caption = "自定义工具(&K)"
  33.         .Style = msoButtonIconAndCaption
  34.         Set objButton1 = .Controls.Add(Type:=msoControlButton)    '创建按钮
  35.         With objButton1    '引用子菜单
  36.             .Caption = "按钮1"    '设置菜单的显示文字
  37.             .Style = msoButtonIconAndCaption    '同时显示文字与图标
  38.             .FaceId = 81    '指定图标
  39.         End With
  40.         Set objButton2 = .Controls.Add(Type:=msoControlButton)    '创建第二个按钮
  41.         With objButton2
  42.             .Caption = "签名"
  43.             .Style = msoButtonIconAndCaption
  44.             .FaceId = 82
  45.         End With
  46.         Set objButton3 = .Controls.Add(Type:=msoControlPopup)    '创建第三个按钮为二级菜单
  47.         With objButton3
  48.             .Caption = "部门"
  49.             .FaceId = 83
  50.             Set objButton4 = .Controls.Add(Type:=msoControlButton)    '创建第四个按钮为二级菜单一
  51.             With objButton4
  52.                 .Caption = "工程部"
  53.                 .Style = msoButtonIconAndCaption
  54.                 .FaceId = 84
  55.             End With
  56.             Set objButton5 = .Controls.Add(Type:=msoControlPopup)    '创建第五个按钮为三级菜单
  57.             With objButton5
  58.                 .Caption = "生产部"
  59.                 .Style = msoButtonIconAndCaption
  60.                 .FaceId = 85
  61.                 Set objButton6 = .Controls.Add(Type:=msoControlButton)    '创建第六个按钮 为三级菜单一
  62.                 With objButton6
  63.                     .Caption = "组装线"
  64.                     .Style = msoButtonIconAndCaption
  65.                     .FaceId = 86
  66.                 End With
  67.                 Set objButton7 = .Controls.Add(Type:=msoControlButton)    '创建第六个按钮 为三级菜单二
  68.                 With objButton7
  69.                     .Caption = "包装线"
  70.                     .Style = msoButtonIconAndCaption
  71.                     .FaceId = 87
  72.                 End With
  73.             End With
  74.         End With
  75.         xlApp.ScreenUpdating = True
  76.         .Visible = True
  77.     End With
  78. End Sub

  79. Public Sub objButton1_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  80.     按钮1
  81. End Sub
  82. Public Sub objButton2_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  83.     签名
  84. End Sub
  85. Public Sub objButton3_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  86.     部门
  87. End Sub
  88. Public Sub objButton4_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  89.     工程部
  90. End Sub
  91. Public Sub objButton5_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  92.     生产部
  93. End Sub
  94. Public Sub objButton6_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  95.     组装线
  96. End Sub
  97. Public Sub objButton7_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  98.     包装线
  99. End Sub

  100. Public Sub 部门()
  101.     With xlApp
  102.         .Selection.Value = "部门"
  103.     End With
  104. End Sub
  105. Public Sub 工程部()
  106.     With xlApp
  107.         .Selection.Value = "工程部"
  108.     End With
  109. End Sub
  110. Public Sub 生产部()
  111.     With xlApp
  112.         .Selection.Value = "生产部"
  113.     End With
  114. End Sub
  115. Public Sub 组装线()
  116.     With xlApp
  117.         .Selection.Value = "组装线"
  118.     End With
  119. End Sub
  120. Public Sub 包装线()
  121.     With xlApp
  122.         .Selection.Value = "包装线"
  123.     End With
  124. End Sub
  125. Public Sub 签名()
  126.     With xlApp
  127.         .Selection.Value = "签名"
  128.     End With

  129. End Sub
  130. Public Sub 按钮1()
  131.     MsgBox "你按下了按钮1"
  132. End Sub
复制代码
回复

使用道具 举报

发表于 2013-12-26 10:54 | 显示全部楼层
如果分成两个模块,这么写:
设计器Connect代码:
  1. Option Explicit

  2. Implements IDTExtensibility2
  3. Dim WithEvents objButton1 As Office.CommandBarButton
  4. Dim WithEvents objButton2 As Office.CommandBarButton
  5. Dim objButton3 As Office.CommandBarControl
  6. Dim WithEvents objButton4 As Office.CommandBarButton
  7. Dim objButton5 As Office.CommandBarControl
  8. Dim WithEvents objButton6 As Office.CommandBarButton
  9. Dim WithEvents objButton7 As Office.CommandBarButton

  10. Private Sub IDTExtensibility2_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
  11. '相当于Excel的Workbook_Open事件
  12.     Set xlApp = Application
  13.     CreateMenus  '创建2003菜单
  14. End Sub
  15. Private Sub IDTExtensibility2_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
  16. '关闭时或不引用时(断开)  相当于Exce的Workbook_BeforeClose(Cancel As Boolean)事件
  17.     On Error Resume Next
  18.     xlApp.CommandBars("Worksheet Menu Bar").Controls("自定义工具(&K)").Delete
  19. End Sub
  20. Private Sub IDTExtensibility2_OnAddInsUpdate(custom() As Variant)   '占位
  21. End Sub
  22. Private Sub IDTExtensibility2_OnBeginShutdown(custom() As Variant)   '占位
  23. End Sub
  24. Private Sub IDTExtensibility2_OnStartupComplete(custom() As Variant)   '占位
  25. End Sub
  26. Private Sub IDTExtensibility_OnStartupComplete(custom() As Variant)   '占位
  27. End Sub
  28. Private Sub CreateMenus()    '创建自定义工具栏
  29.     On Error Resume Next
  30.     xlApp.CommandBars("Worksheet Menu Bar").Controls("自定义工具(&K)").Delete
  31.     With xlApp.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup, Before:=11)  '创建一个新工具栏
  32.         .Caption = "自定义工具(&K)"
  33.         .Style = msoButtonIconAndCaption
  34.         Set objButton1 = .Controls.Add(Type:=msoControlButton)    '创建按钮
  35.         With objButton1    '引用子菜单
  36.             .Caption = "按钮1"    '设置菜单的显示文字
  37.             .Style = msoButtonIconAndCaption    '同时显示文字与图标
  38.             .FaceId = 81    '指定图标
  39.         End With
  40.         Set objButton2 = .Controls.Add(Type:=msoControlButton)    '创建第二个按钮
  41.         With objButton2
  42.             .Caption = "签名"
  43.             .Style = msoButtonIconAndCaption
  44.             .FaceId = 82
  45.         End With
  46.         Set objButton3 = .Controls.Add(Type:=msoControlPopup)    '创建第三个按钮为二级菜单
  47.         With objButton3
  48.             .Caption = "部门"
  49.             .FaceId = 83
  50.             Set objButton4 = .Controls.Add(Type:=msoControlButton)    '创建第四个按钮为二级菜单一
  51.             With objButton4
  52.                 .Caption = "工程部"
  53.                 .Style = msoButtonIconAndCaption
  54.                 .FaceId = 84
  55.             End With
  56.             Set objButton5 = .Controls.Add(Type:=msoControlPopup)    '创建第五个按钮为三级菜单
  57.             With objButton5
  58.                 .Caption = "生产部"
  59.                 .Style = msoButtonIconAndCaption
  60.                 .FaceId = 85
  61.                 Set objButton6 = .Controls.Add(Type:=msoControlButton)    '创建第六个按钮 为三级菜单一
  62.                 With objButton6
  63.                     .Caption = "组装线"
  64.                     .Style = msoButtonIconAndCaption
  65.                     .FaceId = 86
  66.                 End With
  67.                 Set objButton7 = .Controls.Add(Type:=msoControlButton)    '创建第六个按钮 为三级菜单二
  68.                 With objButton7
  69.                     .Caption = "包装线"
  70.                     .Style = msoButtonIconAndCaption
  71.                     .FaceId = 87
  72.                 End With
  73.             End With
  74.         End With
  75.         xlApp.ScreenUpdating = True
  76.         .Visible = True
  77.     End With
  78. End Sub

  79. Public Sub objButton1_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  80.     按钮1
  81. End Sub
  82. Public Sub objButton2_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  83.     签名
  84. End Sub
  85. Public Sub objButton3_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  86.     部门
  87. End Sub
  88. Public Sub objButton4_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  89.     工程部
  90. End Sub
  91. Public Sub objButton5_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  92.     生产部
  93. End Sub
  94. Public Sub objButton6_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  95.     组装线
  96. End Sub
  97. Public Sub objButton7_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  98.     包装线
  99. End Sub
复制代码
回复

使用道具 举报

发表于 2013-12-26 10:55 | 显示全部楼层    本楼为最佳答案   
另外插入一个模块
  1. Option Explicit

  2. Public xlApp As Excel.Application

  3. Public Sub 部门()
  4.     With xlApp
  5.         .Selection.Value = "部门"
  6.     End With
  7. End Sub
  8. Public Sub 工程部()
  9.     With xlApp
  10.         .Selection.Value = "工程部"
  11.     End With
  12. End Sub
  13. Public Sub 生产部()
  14.     With xlApp
  15.         .Selection.Value = "生产部"
  16.     End With
  17. End Sub
  18. Public Sub 组装线()
  19.     With xlApp
  20.         .Selection.Value = "组装线"
  21.     End With
  22. End Sub
  23. Public Sub 包装线()
  24.     With xlApp
  25.         .Selection.Value = "包装线"
  26.     End With
  27. End Sub
  28. Public Sub 签名()
  29.     With xlApp
  30.         .Selection.Value = "签名"
  31.     End With

  32. End Sub
  33. Public Sub 按钮1()
  34.     MsgBox "你按下了按钮1"
  35. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-12-27 10:36 | 显示全部楼层
问题已经解决了,真诚感谢版主,您的专业精神很让本人敬佩!!!
回复

使用道具 举报

发表于 2013-12-27 10:50 | 显示全部楼层
楼主,你应该给版主最佳呀,我也很多次得到版主的帮助!
回复

使用道具 举报

 楼主| 发表于 2013-12-28 21:31 | 显示全部楼层
hwc2ycy 发表于 2013-12-26 10:55
另外插入一个模块

再多请教另外一个问题:如何在上述自定义菜单封装程序中,如何将另一个自定义函数合并一起封装,即这个自定义要如何设置,放在哪个地方?烦请版主教导
回复

使用道具 举报

发表于 2013-12-28 21:33 | 显示全部楼层
南海居士 发表于 2013-12-28 21:31
再多请教另外一个问题:如何在上述自定义菜单封装程序中,如何将另一个自定义函数合并一起封装,即这个自 ...

放一块或另外插入一个模块都是可以的,看个人喜好。
回复

使用道具 举报

 楼主| 发表于 2013-12-28 22:24 | 显示全部楼层
hwc2ycy 发表于 2013-12-28 21:33
放一块或另外插入一个模块都是可以的,看个人喜好。

真诚感谢!!!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 05:17 , Processed in 0.325956 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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