4

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

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

我被难住的地方是如何从 channelList 回调中使用“某物”更新 labelText 文本框内容。

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

4

2 回答 2

4

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

  • 将“getText”回调子例程名称添加到功能区 XML,特定于“labelText”编辑框。
    编辑框 id="labelText" 标签="文本:" sizeString="xxxxxxxxxx"
    onChange="TextboxCallback" getText="UpdateTextBoxText"
    screentip="频道标签"
    supertip="限制为 10 个字符。输入完成后按 Enter。"
  • 在组合框回调函数中,将所需的编辑框文本设置为全局并以“labelText”作为参数调用 Ribbon.InvalidateControl。
    MyRibbon.InvalidateControl“标签文本”
  • 实现编辑框回调,将句柄传递给功能区和另一个变量 ByRef 以包含要更新的“东西”。使用全局通过 ByRef 参数更新控件的文本。
    Sub UpdateTextBoxText(控件作为 IRibbonControl, ByRef 返回值)
    选择案例(control.id)       
        案例“标签文本”
            返回值 = 标签文本
    结束选择
    结束子

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

于 2013-08-02T21:03:45.083 回答
2

看看Ribbon.Invalidate方法。当您“使”功能区“无效”时,您基本上将其重置,并且在那一刻您可以根据您在那一刻可以跟踪的任何内容设置功能区上控件的属性。为此,您需要在 VBA 中包含Control.GetEnabledGetVisible等子例程。

您还可以使用 使单个控件无效Ribbon.InvalidateControl

这是一个可能有帮助的链接:http: //sourcedaddy.com/ms-excel/resetting-controls.html

于 2013-08-01T22:08:06.693 回答