我在excel功能区上有一个带有EditBox的自定义选项卡。用户应在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任何帮助都将不胜感激
发布于 2020-05-19 14:50:34
onChange回调的签名应如下所示:
Sub OnChange(control As IRibbonControl, text As String)要更改实现getText回调所需的文本:
Function GetText(control As IRibbonControl) As String当功能区UI无效时,getText回调由Office应用程序调用。因此,您需要强制UI调用回调。对于代码实现的每个回调,响应都会被缓存。
例如,如果外接程序编写器为按钮实现getImage回调过程,则调用该函数一次,加载图像,然后如果需要更新图像,则使用缓存的图像,而不是重新调用该过程。此过程对控件一直有效,直到外接程序使用InvalidateControl方法发出缓存值无效的信号为止,此时,将再次调用回调过程并缓存返回响应。
在下面的示例中,启动主机应用程序将触发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 Subhttps://stackoverflow.com/questions/61883073
复制相似问题