У меня есть надстройка 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()? И если это так, могу ли я что-нибудь сделать, чтобы изменить порядок загрузки или иным образом предотвратить это несоответствие?

0
David Zemens 19 Авг 2014 в 19:24

1 ответ

Лучший ответ

Хорошо, это не заняло много времени, чтобы понять, во время моего обычного поиска и устранения неисправностей / отладки. Отправка ответа на случай, если он будет полезен другим.

Есть ли какое-то свойство надстройки, которое мне нужно установить при ее активации (я использую .Loaded = msoCTrue?

Да. Убедитесь, что .AutoLoad = msoCTrue.

0
David Zemens 19 Авг 2014 в 19:26