ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 关于vb封装弹出式三级菜单问题,请老师指正,究竟哪里出错

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-4-24 15:18 | 显示全部楼层 |阅读模式
本帖最后由 hefeilac 于 2017-4-24 15:26 编辑

此部分代码借用论坛上的,在此感谢原创老师
附件为excel格式,并可正常执行 求助.zip (56.4 KB, 下载次数: 4)
现在我用VB封装后总是弹出
QQ截图20170424151057.jpg
貌似WriteToRng过程出现了问题
我的VB封装代码如下,请老师指正,不胜感激!
我在过程中call main是可以显示弹出式菜单,只有最后输出到表格时出错!
  1. Public xlapp As Excel.Application
  2. Dim Tree
  3. Sub Main()
  4.     Dim mybar As Object, arr, i&, j&, key$, myb, pkey$
  5.     Dim N_col As Long
  6.     Dim wb As Workbook
  7.      On Error Resume Next
  8.      Set wb = GetObject(App.Path & "\紧固件三级选单.xls")
  9.      Set Tree = CreateObject("Scripting.Dictionary")
  10.      xlapp.CommandBars("myCell").Delete
  11.      Set mybar = xlapp.CommandBars.Add(Name:="myCell", Position:=msoBarPopup)
  12.      Tree.Add "myCell", mybar
  13.      arr = wb.Worksheets("sheet1").Range("a1").CurrentRegion.Value
  14.      N_col = UBound(arr, 2)
  15.      ReDim Preserve arr(1 To UBound(arr, 1), 1 To N_col + 1)
  16.      For j = 2 To UBound(arr, 1)
  17.          If Not Tree.Exists(arr(j, 1)) Then
  18.              If arr(j, 2) = "" Then
  19.                  AddControlButton "myCell", arr(j, 1), arr(j, 1), j, N_col
  20.              Else
  21.                  AddControlPopup "myCell", arr(j, 1), arr(j, 1)
  22.              End If
  23.          End If
  24.      Next
  25.      For i = 2 To UBound(arr)
  26.          key = arr(i, 1)
  27.          For j = 2 To N_col
  28.              If arr(i, j) <> "" Then
  29.                  pkey = key
  30.                  key = key & "" & arr(i, j)
  31.                  If arr(i, j + 1) = "" Then
  32.                      AddControlButton pkey, key, arr(i, j), i, N_col
  33.                  Else
  34.                      If Not Tree.Exists(key) Then
  35.                          AddControlPopup pkey, key, arr(i, j)
  36.                      End If
  37.                  End If
  38.              End If
  39.          Next
  40.      Next
  41.      wb.Close False
  42.      Set wb = Nothing
  43.      Set mybar = Nothing
  44. End Sub
  45. Private Sub AddControlButton(ByVal pkey$, ByVal key$, ByVal caption$, ByVal i&, ByVal n&)
  46.     Dim myb
  47.      Set myb = Tree(pkey).Controls.Add(Type:=msoControlButton)
  48.      With myb
  49.          .caption = caption
  50.          .OnAction = "'WriteToRng " & i & "," & n & "'"
  51.      End With
  52.      Tree.Add key, myb
  53. End Sub
  54. Private Sub AddControlPopup(ByVal pkey$, ByVal key$, ByVal caption$)
  55.     Dim myb
  56.      Set myb = Tree(pkey).Controls.Add(Type:=msoControlPopup)
  57.      myb.caption = caption
  58.      Tree.Add key, myb
  59. End Sub
  60. Public Sub WriteToRng(i, N_col)   '写入单元格
  61. xlapp.ScreenUpdating = False
  62.   Dim wb As Workbook
  63.    Set wb = GetObject(App.Path & "\紧固件三级选单.xls")
  64.    Set sh = wb.Worksheets("sheet1")
  65.       xlapp.ActiveCell = sh.Cells(i, N_col).Value
  66.     wb.Close
  67.    Set wb = Nothing
  68. xlapp.ScreenUpdating = True
  69. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2021-9-26 16:30 | 显示全部楼层
你好:现在问题解决了么? 我也遇到了这个问题?

TA的精华主题

TA的得分主题

发表于 2021-9-26 17:00 | 显示全部楼层
OnAction后的WriteToRng子过程,必须置于模块中才能被正常调用,
以上信息不知对楼主是否有用,就当是意见参考吧,其他的我也了解得不多。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-27 00:04 , Processed in 0.040912 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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