Excel VBA - Ribbon - 设置编辑框的值

问题描述 投票:1回答:1

我在excel功能区有一个自定义的标签,并有一个编辑框。用户应该在编辑框中输入一个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

希望得到任何帮助

excel vba ribbon
1个回答
1
投票

的签名 onChange 回调应该是这样的。

Sub OnChange(control As IRibbonControl, text As String)

为了改变文本,你需要实现 getText 回调。

Function GetText(control As IRibbonControl) As String

The getText 当Ribbon UI无效时,Office应用程序会调用回调。所以,你需要强制UI调用回调。对于代码实现的每一个回调,都会缓存响应。

例如,如果一个加载项编写者实现了 getImage 的回调过程,该函数被调用一次,图像被加载,然后如果需要更新图像,则使用缓存的图像代替调用该过程。这个过程对控件来说一直保持不变,直到加载程序通过使用 InvalidateControl 方法,此时,回调过程再次被调用,返回的响应被缓存。

在下面的例子中,启动主机应用程序会触发该方法的 onLoad 事件过程,然后调用一个过程来创建一个代表Ribbon 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
© www.soinside.com 2019 - 2024. All rights reserved.