繁体   English   中英

Excel VBA - 功能区 - 设置编辑框的值

[英]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回调过程,则调用 function 一次,加载图像,然后如果需要更新图像,则使用缓存的图像而不是调用该过程。 此过程对控件保持不变,直到加载项通过使用InvalidateControl方法发出缓存值无效的信号,此时,再次调用回调过程并缓存返回响应。

在以下示例中,启动主机应用程序会触发onLoad事件过程,然后调用一个过程,该过程创建一个代表功能区 UI 的 object。 接下来,定义一个回调过程,使 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM