Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-功能区-设置EditBox的值_Excel_Vba_Ribbon - Fatal编程技术网

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

Excel VBA-功能区-设置EditBox的值,excel,vba,ribbon,Excel,Vba,Ribbon,我在excel功能区上有一个带有编辑框的自定义选项卡。用户应在编辑框中输入一个介于100和200之间的数字。如果用户输入了除此之外的任何内容,则应弹出一条错误消息,并且编辑框中的文本应更改为100。最后一部分是我遇到的困难,将EditBox文本设置为“100” EditBox onChange事件的回调 Sub-setQVal(控件作为IRIBOnControl,ByRef文本) 如果不是数字(文本)或文本200,则 MsgBox“错误!请输入一个介于100和200之间的值。” text=100

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

EditBox onChange事件的回调 Sub-setQVal(控件作为IRIBOnControl,ByRef文本) 如果不是数字(文本)或文本<100或文本>200,则 MsgBox“错误!请输入一个介于100和200之间的值。” text=100'这似乎不起作用 出口接头 如果结束 QVal=文本 端接头
任何帮助都将不胜感激。

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

Sub OnChange(control As IRibbonControl, text As String)
要更改文本,需要实现
getText
回调:

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

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

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

<customUI … OnLoad="MyAddInInitialize" …>

我要做一些猜测来尝试
control.text=100
control.text.value=100
text.value=100
..=“100”
。还有什么是
QVal
?它没有在任何地方申报。还有什么代码调用此子对象(值是如何通过参数传递的)?如果Microsoft在模式中添加微调器框,并带有“Min”和“Max”属性,则此操作将更轻松。。。
<customUI … OnLoad="MyAddInInitialize" …>
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