Включенная надстройка не сохраняется после сеанса

У меня есть надстройка 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 — общедоступная константа, представляющая ShortName надстройки Chart Builder.

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


person David Zemens    schedule 19.08.2014    source источник


Ответы (1)


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

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

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

person David Zemens    schedule 19.08.2014