Excel RibbonX读取Editbox值 如何编写VBA获取EditBox内容供子程序调用
实现Ribbon EditBox值存储与调用的VBA方案
前提修改:补充Ribbon加载回调
你现有EditBox的XML无需调整,只需在customUI根节点补充onLoad回调,用于获取Ribbon实例,示例:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="OnRibbonLoad"> <!-- 你原有其他Ribbon配置 --> <editBox id="UserN" label="User name" enabled="false" getText="UserN_getText"/> </customUI>
步骤1:声明公共变量
在标准模块的最顶部(所有子程序上方)声明2个公共变量:
' 存储EditBox对应的用户名,可供所有子程序调用 Public strUserName As String ' 存储Ribbon实例,用于刷新控件显示 Public rib As IRibbonUI
步骤2:实现必需的回调函数
两个回调函数均放在上述标准模块中:
- Ribbon加载回调,用来初始化Ribbon实例
Sub OnRibbonLoad(control As IRibbonUI) Set rib = control End Sub
- 你XML中已配置的getText回调,用来把变量值同步到EditBox显示
Sub UserN_getText(control As IRibbonControl, ByRef returnedVal) returnedVal = strUserName End Sub
步骤3:赋值与调用方法
- 给EditBox赋值:直接修改公共变量
strUserName,之后调用刷新方法同步控件显示即可,示例:
Sub 测试给EditBox赋值() ' 给存储变量赋值 strUserName = "正式用户名" ' 刷新指定ID的EditBox控件,同步显示最新值 If Not rib Is Nothing Then rib.InvalidateControl "UserN" End If End Sub
- 其他子程序取值:直接读取公共变量
strUserName即可,不需要操作控件本身
注意事项
- 需要先在VBA编辑器的「工具-引用」中勾选对应版本的
Microsoft Office [你的Office版本号] Object Library,否则会出现类型未定义的报错 - 如果VBA工程运行报错导致工程重置,公共的Ribbon实例会丢失,需要重新加载自定义选项卡恢复
内容的提问来源于stack exchange,提问作者Chafik
相关产品推荐
相关产品推荐

