ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 自定义选项卡的combobox控件的下拉列表显示

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-2-28 01:08 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
最近学了RibbonX开发,想做一个ComboBox动态显示当前工作簿所有工作表的名称,功能需求如下:
当新增或删除工作表时,单击选项卡中的ComboBox能看到Item List同步发生变化。
但做完了之后发现RibbonX只在打开工作簿时加载一次,
ComboBox的item无法发生变化,特来论坛求助各位兄弟,有没有好的方法思路可以实现?

请参照附件如下



test.rar

36.41 KB, 下载次数: 19

TA的精华主题

TA的得分主题

发表于 2019-2-28 10:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
要做动态的,

TA的精华主题

TA的得分主题

发表于 2019-2-28 14:40 | 显示全部楼层
在增加、删除工作表时,要让下拉框动态更新,可以通过四个步骤完成:
1、声明一个变量,用来存储当前功能区引用。
Public grxIRibbonUI As IRibbonUI,

2、功能区有个onLoad事件,在这里,可以把当前功能区对象保存到变量 grxIRibbonUI
Sub rxIRibbonUI_onLoad(ribbon As IRibbonUI)
    Set grxIRibbonUI = ribbon
End Sub

3、onLoad事件运行的过程名自己定义,在XML代码中设定:
customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"  onLoad="rxIRibbonUI_onLoad"

4、在ThisWorkbook 模块中加入代码,当激活新的工作表时,刷新功能区的"ks_n",即下拉框:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    grxIRibbonUI.InvalidateControl ("ks_n")
End Sub

==================================
原附件打开时提示一个加载Dll错误。这个附件是新建的一个工作簿。



微时空_test1.rar

16.78 KB, 下载次数: 30

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-28 16:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
山菊花 发表于 2019-2-28 14:40
在增加、删除工作表时,要让下拉框动态更新,可以通过四个步骤完成:
1、声明一个变量,用来存储当前功能 ...

山菊花大哥你好,
感谢您的专业帮助,我还有一个问题需要你的援助,我需要把这个excel保存成xlam格式用来加载到其他excel中,这样的话下面这段代码就没办法用到,想问问还有什么好方法可以代替实现监测当前工作簿的工作表变化呢?
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    grxIRibbonUI.InvalidateControl ("ks_n")
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-28 16:53 | 显示全部楼层
本帖最后由 微时空 于 2019-2-28 16:54 编辑
山菊花 发表于 2019-2-28 14:40
在增加、删除工作表时,要让下拉框动态更新,可以通过四个步骤完成:
1、声明一个变量,用来存储当前功能 ...

如果是想要做成xlam加载项加载到其他 EXCEL 中呢?怎么监测 当前工作簿的工作表变化 呢?
这样用ThisWorkbook 里面的代码就没办法对ActiveWorkbook起作用了。

TA的精华主题

TA的得分主题

发表于 2019-2-28 17:09 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-28 17:16 | 显示全部楼层
山菊花 发表于 2019-2-28 17:09
可以按需要改为ActiveWorkbook。

改成下面这样对吗?


Public grxIRibbonUI As IRibbonUI
Public selsht As String
Sub rxIRibbonUI_onLoad(ribbon As IRibbonUI)
Set grxIRibbonUI = ribbon
End Sub
Sub nCount(control As IRibbonControl, ByRef returnedVal)
    returnedVal = ActiveWorkbook.Sheets.Count
End Sub
Sub nID(control As IRibbonControl, index As Integer, ByRef id)
    id = control.id & index
End Sub
Sub nLabel(control As IRibbonControl, index As Integer, ByRef returnedVal)
    returnedVal = ActiveWorkbook.Sheets(index + 1).Name
End Sub

'设置默认值
Sub nMoren(control As IRibbonControl, ByRef returnedVal)
    If selsht = "" Then
    returnedVal = ActiveWorkbook.Sheets(1).Name
    End If
End Sub

'选择工作表保存到变量
Sub ksn_Click(control As IRibbonControl, text As String)
    selsht = text
    MsgBox selsht
End Sub
Sub ActiveWorkbook_SheetActivate(ByVal Sh As Object)
grxIRibbonUI.InvalidateControl ("ks_n")
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-28 17:17 | 显示全部楼层
山菊花 发表于 2019-2-28 17:09
可以按需要改为ActiveWorkbook。

山哥,改成下面这样对吗?

Public grxIRibbonUI As IRibbonUI
Public selsht As String
Sub rxIRibbonUI_onLoad(ribbon As IRibbonUI)
Set grxIRibbonUI = ribbon
End Sub
Sub nCount(control As IRibbonControl, ByRef returnedVal)
    returnedVal = ActiveWorkbook.Sheets.Count
End Sub
Sub nID(control As IRibbonControl, index As Integer, ByRef id)
    id = control.id & index
End Sub
Sub nLabel(control As IRibbonControl, index As Integer, ByRef returnedVal)
    returnedVal = ActiveWorkbook.Sheets(index + 1).Name
End Sub

'设置默认值
Sub nMoren(control As IRibbonControl, ByRef returnedVal)
    If selsht = "" Then
    returnedVal = ActiveWorkbook.Sheets(1).Name
    End If
End Sub

'选择工作表保存到变量
Sub ksn_Click(control As IRibbonControl, text As String)
    selsht = text
    MsgBox selsht
End Sub
Sub ActiveWorkbook_SheetActivate(ByVal Sh As Object)
grxIRibbonUI.InvalidateControl ("ks_n")
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-28 17:20 | 显示全部楼层
山菊花 发表于 2019-2-28 17:09
可以按需要改为ActiveWorkbook。

是改成这样就行吗?
Private Sub ActiveWorkbook_SheetActivate(ByVal Sh As Object)
grxIRibbonUI.InvalidateControl ("ks_n")
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-28 17:37 | 显示全部楼层
山菊花 发表于 2019-2-28 17:09
可以按需要改为ActiveWorkbook。

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
grxIRibbonUI.InvalidateControl ("ks_n")
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-23 09:12 , Processed in 0.038229 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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