回到VBA的过去,我们曾经能够直接通过名称访问表单上的控件。我对如何在VBA 2010中执行此操作感到困惑(或者甚至不再可能)。

假设我有一个功能区控件,其中包含一个名为“ channelList”的下拉列表,在功能区上的其他地方,我有一个名为“ labelText”的文本框。每个项目都有一个独特的回调函数-当我在labelText中键入内容时,其回调将触发,而当我从channelList列表框中选择一个项目时,其回调将使用作为参数传递的列表项目触发。

我受困的是如何从channelList回调中使用“某些”更新labelText文本框内容。

有没有一种方法可以从列表框回调中直接访问文本框控件,还是必须生成某种事件?我将使用什么方法或函数来设置控件的文本值? (是否需要将IRibbonControl对象转换为某些对象?)

最佳答案

解决方案是答案和评论的结合,所以去了:


向功能区XML添加“ getText”回调子例程名称,特定于“ labelText”编辑框。


editBox id =“ labelText” label =“ Text:” sizeString =“ xxxxxxxxxx”
onChange =“ TextboxCallback” getText =“ UpdateTextBoxText”
screentip =“频道标签”
“ supertip =”限制为10个字符。完成输入后,请按Enter。



在组合框回调函数中,将所需的编辑框文本设置为全局,然后使用“ labelText”作为参数调用Ribbon.InvalidateControl。


MyRibbon.InvalidateControl“ labelText”



实现editbox回调,将一个句柄传递到功能区,并传递另一个变量ByRef包含要更新的“东西”。使用全局变量通过ByRef参数更新控件的文本。


Sub UpdateTextBoxText(控件为IRibbonControl,ByRef返回了Val)
选择案例(control.id)
案例“ labelText”
returnVal = LabelText
结束选择
结束子


我想这是“进步”。 labelText.Value =“ blah”太简单了。

10-06 05:11