我在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
希望得到任何帮助
的签名 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