VBA Visio меняет значение ленты на лету - PullRequest
0 голосов
/ 01 декабря 2018

В 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

Спасибо

1 Ответ

0 голосов
/ 01 декабря 2018

я нахожу ошибку !!Функция onload никогда не запускалась.У меня был «ThisDocument».на линии:

ribbonXML = "<customUI xmlns=""http://schemas.microsoft.com/office/2006/01/customui"" onLoad=""ThisDocument.ribbonLoaded"">"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...