Ich habe ein AddIn, das von einer größeren Anzahl von Nutzern verwendet wird und ab und an mal upgedatet werden muss. Bislang lief das von Hand, mittlerweile erledige ich das über folgenden Code:
' Tauscht das AddIn aus
Private Sub ExchangeAddin(myAddIn As AddIn)
Dim addInState As Boolean
addInState = myAddIn.Installed
' AddIn deaktivieren
myAddIn.Installed = False
On Error Resume Next
' Datei löschen wenn vorhanden - eigentlich unnötig
If Dir(myAddIn.FullName) "" Then Kill myAddIn.FullName
' Fehler ausgeben, wenn Löschvorgang nicht möglich
If Err.Number 0 Then
Call MsgBox("Kann installierte AddIn-Datei nicht ersetzen.", vbExclamation)
myAddIn.Installed = addInState
Exit Sub
End If
' Neue Datei kopieren
FileCopy sourceFile, myAddIn.FullName
' AddIn wieder registrieren
myAddIn.Installed = True
End Sub
Wie gesagt, bislang wurde das AddIn von den Nutzern manuell installiert und upgedatet. Da bei einigen Nutzern der Zugriff auf das Systemlaufwerk gesperrt ist, haben diese das AddIn in Ihren Eigenen Dateien abgelegt (da sonst das Update problematisch gewesen wäre, da sie den Standard-AddIn-Ordner im Explorer nicht aufrufen können).
Bei Verwendung des Makros ist die Systemlaufwerksperre aber kein Problem, da diese nur die Anzeige im Explorer sperrt und ansonsten der Zugriff problemlos möglich ist. Daher würde ich gerne die Installationsstruktur vereinheitlichen und das AddIn bei allen ins Standard-AddIn-Verzeichnis verschieben.
Allerdings müßte ich es dazu erst einmal aus der AddIn-Liste bekommen, da ansonsten der alte Pfad des AddIns bestehen bleibt - selbst wenn ich das AddIn mit AddIns.Add erneut einfüge.
Kennt jemand eine Möglichkeit, das per VBA aus der Liste zu bekommen bzw. die Pfadangabe zu ändern? AddIn.Path und AddIn.FullName sind ja schreibgeschützt, über die geht es also nicht.
Wie es manuell geht ist mir schon klar, nur wenn es auch nur 10 Sekunden Arbeit bedeutet, dann geht gleich wieder das Gemecker los ;).
Gruss, Jogy