Невозможно скрыть пользовательский элемент управления на ленте Excel

Пытался скрыть настраиваемый элемент управления на ленте Excel, и мой код продолжает показывать сообщение из моей подпрограммы RefreshRibbon(). Элемент управления остается видимым независимо от того, какую строку я передаю из подпрограммы HideImport(). Я включаю сюда XML для пользовательской ленты и макросы, которые вызывают проблему.

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
    <tabs>
        <tab id="tabControl1" label="Control">
            <group id="grpImport1" label="Import" getVisible="GetVisible" tag="ShowFalse">
                <button id="btnDetail" label="Read Detail" image="Ex" size="large" onAction="ReadDetail" />
            </group>
            <group id="grpJourneys1" label="Journeys" getVisible="GetVisible" tag="ShowTrue">
                <button id="btnLegAdd" label="Add" image="AddLeg" size="large" onAction="AddLeg" />
                <button id="btnLegRemove" label="Remove" image="RemoveLeg" size="large" onAction="RemoveLeg" />
                <button id="btnLegRetime" label="Retime" image="RetimeLeg" size="large" onAction="RetimeLeg" />
            </group>
        </tab>
    </tabs>
</ribbon>

Dim ribControl   As IRibbonUI
Public strTag    As String

Sub RibbonOnLoad(ribbon As IRibbonUI)
   Set ribControl = ribbon
End Sub

Sub GetVisible(control As IRibbonControl, ByRef visible)
  If strTag = "Show" Then
    visible = True
  Else
    If control.Tag Like strTag Then
      visible = True
    Else
      visible = False
    End If
  End If
End Sub

Sub RefreshRibbon(Tag As String)
  strTag = Tag
  If ribControl Is Nothing Then
    MsgBox "Error, Save/Restart your workbook"
  Else
    ribControl.Invalidate
  End If
End Sub

Sub ReadDetail(control As IRibbonControl)
  MsgBox "This is Read Detail"
End Sub

Sub AddLeg(control As IRibbonControl)
  MsgBox "This is Add Leg"
End Sub

Sub RemoveLeg(control As IRibbonControl)
  MsgBox "This is Remove Leg"
End Sub

Sub RetimeLeg(control As IRibbonControl)
  MsgBox "This is Retime Leg"
End Sub

Sub HideImport()
  Call RefreshRibbon(Tag:="*True")
End Sub

Don't normally publish on here as always manage to solve it myself after reading your responses to other questions but this is driving me mad.


person Lorne    schedule 11.10.2017    source источник


Ответы (1)


У вас нет функции обратного вызова в пользовательском коде ленты: Пример: <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="RibbonOnLoad">

Таким образом, вы не выполняете процедуру RibbonOnLoad(). Поэтому вы не устанавливаете переменную ribControl

person KacireeSoftware    schedule 11.10.2017
comment
Большое спасибо за быстрый ответ. Ранее использовались объекты в VBA и считалось, что onLoad является частью объявления IRibbonUI. Имеет смысл, и теперь это работает, я могу изменить, чтобы делать то, что хочу - person Lorne; 12.10.2017