Excel VBA - Ribbon - 设置EditBox的值

Excel VBA - Ribbon - Set value of EditBox

我在 excel 功能区上有一个带有编辑框的自定义选项卡。用户应在 EditBox 中输入 100 到 200 之间的数字。如果用户输入除此以外的任何内容,则应弹出一条错误消息,并且 EditBox 中的文本应更改为 100。最后一部分是我遇到困难的部分,将 EditBox 文本设置为“100”。

'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

如有任何帮助,我们将不胜感激

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

Sub OnChange(control As IRibbonControl, text As String)

要更改文本,您需要执行 getText 回调:

Function GetText(control As IRibbonControl) As String

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

例如,如果外接程序编写器为按钮实现 getImage 回调过程,则调用该函数一次,加载图像,然后如果需要更新图像,缓存的图像用于代替召回程序。此过程对控件保持不变,直到加载项使用 InvalidateControl 方法发出缓存值无效的信号,此时再次调用回调过程并缓存 return 响应.

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

<customUI … OnLoad="MyAddInInitialize" …>

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

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