Имам добавка на 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
Така че проверяваме дали е свързан към мрежа (пропуск), след което проверяваме дали Add In вече съществува, ако не, тогава подканваме за актуализация. След това, ако да, тогава Контролерът изтегля текущата версия от споделена директория и се активира/инсталира на потребителската машина.
Проблемът е, че когато тази добавка е инсталирана, тя винаги ме отвежда до функцията DoUpdate
(която подканва потребителя vbYesNo
да актуализира версията).
Тази функция е възпроизведена по-долу и 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()
? И ако случаят е такъв, има ли нещо, което мога да направя, за да променя реда на зареждане или по друг начин да предотвратя това несъответствие?