首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel VBA -功能区-设置EditBox的值

Excel VBA -功能区-设置EditBox的值
EN

Stack Overflow用户
提问于 2020-05-19 12:06:42
回答 1查看 710关注 0票数 1

我在excel功能区上有一个带有EditBox的自定义选项卡。用户应在EditBox中输入一个介于100和200之间的数字。如果用户输入的不是该值,则会弹出一条错误消息,并且EditBox中的文本应该更改为100。最后一部分是我遇到困难的部分,将EditBox文本设置为"100“。

代码语言:javascript
复制
'Callback for EditBox onChange event
Sub setQVal(control As IRibbonControl, ByRef text)

    If Not IsNumeric(text) Or text < 100 Or text > 200 Then
        MsgBox "Error! Please enter a value between 100 and 200."
        text = 100   'This doesn't seem to work
        Exit Sub
    End If

    QVal = text

End Sub

任何帮助都将不胜感激

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-19 14:50:34

onChange回调的签名应如下所示:

代码语言:javascript
复制
Sub OnChange(control As IRibbonControl, text As String)

要更改实现getText回调所需的文本:

代码语言:javascript
复制
Function GetText(control As IRibbonControl) As String

当功能区UI无效时,getText回调由Office应用程序调用。因此,您需要强制UI调用回调。对于代码实现的每个回调,响应都会被缓存。

例如,如果外接程序编写器为按钮实现getImage回调过程,则调用该函数一次,加载图像,然后如果需要更新图像,则使用缓存的图像,而不是重新调用该过程。此过程对控件一直有效,直到外接程序使用InvalidateControl方法发出缓存值无效的信号为止,此时,将再次调用回调过程并缓存返回响应。

在下面的示例中,启动主机应用程序将触发onLoad事件过程,然后该过程将调用一个创建表示功能区UI的对象的过程。接下来,定义一个回调过程,该过程使UI上的控件无效,然后刷新UI。

代码语言:javascript
复制
<customUI … OnLoad="MyAddInInitialize" …>

在代码中,如果需要更新文本(调用getText回调),则需要使用以下方法:

代码语言:javascript
复制
Dim MyRibbon As IRibbonUI 

Sub MyAddInInitialize(Ribbon As IRibbonUI) 
 Set MyRibbon = Ribbon 
End Sub 

Sub myFunction() 
 MyRibbon.InvalidateControl("editBoxControlID") ' Invalidates the cache of a single control 
End Sub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61883073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档