В Microsoft Visio я могу изменить меню ленты, но мне нужно изменить значение на лету, когда, например, пользователь нажимает на форму.Чтобы упростить понимание, смотрите нижеприведенный мной код, который создает новое меню под названием «тест», в котором есть кнопка.Цель заключается в том, чтобы при нажатии на эту кнопку она меняла название ярлыка кнопки.Я не могу заставить это работать.Обратите внимание, что я не помещал функции обратного вызова в модуль, так как я должен использовать определенные функции, являющиеся частью глобального.
См. Ниже мой кодВы можете просто скопировать / вставить его и протестировать.Надеюсь, кто-то мог выделить ошибку или обходной путь?
Option Explicit
Dim ribbonUI As IRibbonUI
Dim loggedIn As Boolean
Public Sub CreateRibbon()
Dim ribbonXML As String
ribbonXML = "<customUI xmlns=""http://schemas.microsoft.com/office/2006/01/customui"" onLoad=""ribbonLoaded"">"
ribbonXML = ribbonXML + " <ribbon startFromScratch=""false"">"
ribbonXML = ribbonXML + " <tabs>"
ribbonXML = ribbonXML + " <tab id=""TB01"" label=""Test"">"
ribbonXML = ribbonXML + " <group id=""GR01"" label=""Test Labelling"">"
ribbonXML = ribbonXML + " <button id=""Login"" getLabel=""ThisDocument.getLabelLogin"" size=""large"" imageMso=""HappyFace"" onAction=""ThisDocument.OnActionLogin""/>"
ribbonXML = ribbonXML + " </group>"
ribbonXML = ribbonXML + " </tab>"
ribbonXML = ribbonXML + " </tabs>"
ribbonXML = ribbonXML + " </ribbon>"
ribbonXML = ribbonXML + "</customUI>"
ActiveDocument.CustomUI = ribbonXML
End Sub
Public Sub Document_DocumentOpened(ByVal doc As IVDocument)
Call CreateRibbon
End Sub
Public Sub ribbonLoaded(ribbon As IRibbonUI)
Set ribbonUI = ribbon
End Sub
Public Sub OnActionLogin(control As IRibbonControl)
If loggedIn = True Then
loggedIn = False
Else
loggedIn = True
End If
MsgBox ("you press the buttton. Value=" & loggedIn)
ribbonUI.Invalidate
End Sub
Public Sub getLabelLogin(control As IRibbonControl, ByRef returnedVal)
If loggedIn = True Then
returnedVal = "Value True"
Else
returnedVal = "Value False"
End If
MsgBox "New value=" & loggedIn & " " & control.id
End Sub
Спасибо