【问题标题】:Updating contents of an iRibbon control from another control's callback从另一个控件的回调更新 iRibbon 控件的内容
【发布时间】:2013-08-01 20:38:13
【问题描述】:

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

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

让我感到困惑的是如何在 channelList 回调中使用“某物”更新 labelText 文本框的内容。

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

【问题讨论】:

    标签: vba excel-2010 ribbon


    【解决方案1】:

    解决方案是答案和 cmets 的组合,所以这里是:

    • 将“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" 太简单了。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 使控件无效对我来说很有意义,但是我仍然不知道如何从回调函数中设置新的文本框值,因为 labelText 功能区控件似乎没有任何方法或曝光到VBA(无论如何我都能找到)。我需要调用什么方法来实际设置文本,以及在哪里/如何记录?我已经搜索了 VBA 帮助,但没有结果。
      • 你不会在 VBA 帮助中找到这个。您需要搜索功能区相关的帖子。此外,您应该使用某种功能区 UI 编辑器。我使用Andy Pope's。当我查看它时,我看到一个 EditBox 和 Label 控件,没有“labelText”控件。我看到的事件是 EditBox.GetText 和 Label.GetLabel。请注意,这些东西起初令人困惑。理想情况下,我会得到一本解决功能区定制的书——也许是专业 Excel 开发。
      • labelText 是我分配给我的 EditBox 控件的名称。我使用 Microsoft Office 的自定义 UI 编辑器,它是 100% 简单的。我会接受您对一本书的建议,并会查看您建议的程序。 2010 VBA 是从 2003 年开始的范式转变,有了这个功能区的东西,它本质上就像一种新语言。我已经从流利变成了完全文盲。
      • 当我使用建议的工具加载功能区时,它没有出现 - 就好像 XLS 文件中没有定义功能区一样。我现在真的很困惑。
      • 坚持住。你是对的,这是一个很大的变化,至少在一开始并不那么有趣。不过它变得更容易了。也许尝试从头开始做一个?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      • 2020-04-19
      相关资源
      最近更新 更多