【问题标题】:VBA code to change label of multiple ribbon buttons on running a macro在运行宏时更改多个功能区按钮标签的 VBA 代码
【发布时间】:2016-09-15 11:14:08
【问题描述】:

我已经使用here 提供的电子表格创建了一个功能区,只要将宏分配给按钮,它就可以很好地工作。但是,我想在一组选项卡中包含配置详细信息,以使其始终可见,而不会占用 Excel 工作表空间。这是未来的状态: Group in the custom tab

我有一个小宏来选择环境并识别图像中显示的各个字段的值。下面是代码的样子:

Sub Change_Configuration() 
    Dim ConfigButton As Object 
    Dim Labeling As String 
     'SelectEnvironment.Show
    Environment = "PROD" 
    If Environment = "QAS" Then 


        SourceSystem = "ABC" 
        TargetSystem = "DEF" 
        SourceSchema = "EFG" 
        TargetSchema = "GHI" 
    ElseIf Environment = "PROD" Then 
        SourceSystem = "IJK" 
        TargetSystem = "JKL" 
        SourceSchema = "LMN" 
        TargetSchema = "NOP" 
    End If 
    GetLabel ConfigButton, Labeling 'I do not know what to do here
End Sub 

我知道 Get Label 是实现它的方法,但我只是不知道如何实现我想要实现的目标。当我打开 excel 文件并正确填充默认值(IF 部分)时,我当前的 GetLabel 回调工作正常。我试图包含“Else”部分来更新标签,但它不起作用。

原代码:

Sub GetLabel(ByVal control As IRibbonControl, ByRef Labeling)
    Select Case control.ID

      Case "CustomTab": Labeling = "TEST_RIBBON"

      Case "GroupE": Labeling = "Configuration Details"
      Case "eButton01": Labeling = "Change Environment"
      Case "eButton02": Labeling = "Selected Environment" & " - " & "QAS"
      Case "eButton03": Labeling = "Source System" & " - " & "ABC"
      Case "eButton04": Labeling = "Source Schema" & " - " & "DEF"
      Case "eButton05": Labeling = "Target System" & " - " & "GHI"
      Case "eButton06": Labeling = "Target Schema" & " - " & "IJK"

    End Select
 End Sub

当我打开 excel 时,所有标签都有上面定义的值。

以下是修改后的代码(根据 Change_Configuration 宏修改标签未成功)。请注意,当我的工作簿打开并正确显示值时,修改后的代码也不会引发任何错误。

Sub GetLabel(ByVal control As IRibbonControl, ByRef Labeling) 


    If Environment = vbNullString Then 


        Select Case control.ID 

        Case "CustomTab": Labeling = "My Tab" 


        Case "GroupE": Labeling = "Configuration Details" 
        Case "eButton01": Labeling = "Change Environment" 
        Case "eButton02": Labeling = "Selected Environment" & " - " & "QAS" 
        Case "eButton03": Labeling = "Source System" & " - " & "ABC" 
        Case "eButton04": Labeling = "Source Schema" & " - " & "DEF" 
        Case "eButton05": Labeling = "Target System" & " - " & "EFG" 
        Case "eButton06": Labeling = "Target Schema" & " - " & "GHI" 

        End Select 

    Else 
        Select Case ConfigButton 
        Case "eButton02": Labeling = "Selected Environment" & " - " & Environment 
        Case "eButton03": Labeling = "Source System" & " - " & SourceSystem 
        Case "eButton04": Labeling = "Source Schema" & " - " & SourceSchema 
        Case "eButton05": Labeling = "Target System" & " - " & TargetSystem 
        Case "eButton06": Labeling = "Target Schema" & " - " & TargetSchema 
        End Select 
    End If 

End Sub 

非常感谢您的帮助。

-杰维奇

【问题讨论】:

    标签: excel vba label ribbon


    【解决方案1】:

    已解决 - 必须在调整 XML 和 Invalidate 函数后包含对 Ribbon 的 onload 回调。

    【讨论】:

      【解决方案2】:

      相关代码太少,无法确保帮助您完成

      但试着改变一下:

      Select Case ConfigButton
      

      到:

      Select Case control.ID
      

      看看会发生什么……

      【讨论】:

      • 感谢您的回复,但我确实尝试过。调试时出现错误是“运行时错误'91':对象变量或未设置块变量”
      • 选择Case control.ID
      • 它在If Environment = vbNullString Then 分支中工作吗?
      • 不,它没有。我已经给出了我使用过的文件的链接。这个 If-Then-Else 是我写的,用来合并一个额外的检查。打开文件时会加载选项卡。如果你参考我分享的链接,我想你会明白的。
      • 该链接让我看到大部分变黑的屏幕截图。用最少的功能代码更新您的帖子,重现良好行为和不良行为
      最近更新 更多