У меня есть надстройка PowerPoint ( «Построитель диаграмм» ), которая при включении вручную (Разработчик | Надстройки | Добавить новую) надстройка сохраняется в Приложении после истечения срока действия сеанса. То есть, я могу закрыть PowerPoint, снова открыть его позже, и тогда надстройка все еще будет «установлена» и доступна для использования.
Для упрощения распространения обновлений я создал еще одну надстройку ( «Контроллер» ), которая проверяет версию на наличие обновлений и при необходимости устанавливает самую последнюю версию на пользовательские машины.
Контроллер вызывает это из ленточного обратного вызова onLoad
:
Option Private Module
Option Explicit
Private rib As IRibbonUI
''Callback for customUI.onLoad
Sub RibbonOnLoad(ribbon As IRibbonUI)
Set rib = ribbon
Call UPDATE(rib)
End Sub
Private Sub UPDATE(rib)
'Debug.Print ObjPtr(rib)
'1 Check for valid network connection:
If NetworkConnected Then
'2 Check the add-in already exists:
If Not AddInExists Then
If Not DoUpdate Then Exit Sub
End If
'3 Call procedure to update the PPAM if needed
If CheckUpdate Then
Application.Run "ChartBuilder_PPT!AddIn_RibbonExtensibility.RibbonOnLoad", rib
Else:
MsgBox "unable to enable the CB ribbon!", vbCritical
End If
Else
'4 The user is not connected to the network
Debug.Print "Not connected to JDPA network."
End If
End Sub
Итак, мы проверяем, подключен ли к сети (проход), затем мы проверяем, существует ли уже надстройка, если нет, мы запрашиваем обновление. Если да, то Контроллер загружает текущую версию из пути к общему каталогу и активирует / устанавливает на пользовательском компьютере.
Проблема в том, что когда эта надстройка установлена, она всегда переводит меня к функции DoUpdate
(которая предлагает пользователю vbYesNo
обновить версию).
Эта функция воспроизводится ниже, а ShortName
является общедоступной константой, представляющей короткое имя надстройки построителя диаграмм .
Function AddInExists() As Boolean
Dim a As AddIn
For Each a In Application.AddIns
If a.Name = ShortName Then
AddInExists = True
Exit For
End If
Next
End Function
ВОПРОС
Есть ли у надстройки какое-то свойство, которое мне нужно настроить при ее активации (я использую .Loaded = msoCTrue
?
Или надстройки загружаются последовательно, например, когда Контроллер загружен, Построитель диаграмм (пока) не загружается, и это вызывает ложноотрицательный результат функция AddInExists()
? И если это так, могу ли я что-нибудь сделать, чтобы изменить порядок загрузки или иным образом предотвратить это несоответствие?
1 ответ
Хорошо, это не заняло много времени, чтобы понять, во время моего обычного поиска и устранения неисправностей / отладки. Отправка ответа на случай, если он будет полезен другим.
Есть ли какое-то свойство надстройки, которое мне нужно установить при ее активации (я использую .Loaded = msoCTrue?
Да. Убедитесь, что .AutoLoad = msoCTrue
.
Похожие вопросы
Новые вопросы
vba
Visual Basic для приложений (VBA) — это управляемый событиями объектно-ориентированный язык программирования для написания макросов, используемый для всего пакета Office, а также для других приложений. VBA не эквивалентен VB.NET или VBS; если вы работаете в Visual Studio, используйте [vb.net]. Если ваш вопрос конкретно касается программирования какого-либо приложения MS Office, также используйте соответствующий тег: [excel], [ms-access], [ms-word], [outlook], [visio] или [ms-project].