![](/img/trans.png)
[英]Excel VBA Ribbon - Set value of editBox on Startup Based on Value on Worksheet
[英]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.