2016-12-21 2 views
0

-Code am unterenWorkbook.Open-Code stehen bleibt auf halbem Wege durch

ich auf ein Update System gerade arbeite für die AddIn Ich habe für mein Team bei der Arbeit zu nutzen.

Ich habe eine Mini-Datei 'Helper' erstellt. Wenn es geöffnet ist, hat es die folgenden:

1) Speichert sich Application.StartupPath

2) Deinstalliert die aktuelle Version der AddIn

3) Kopiert die aktuelle Version des AddIn aus der Network Drive an den lokalen ADDINS Ordner

4) Erneute Installation der neuen Version des AddIn

5) Schließt sich (die Helper-Datei)

Auf diese Weise wird immer, wenn jemand Excel öffnet, immer die neueste Version des AddIns vorhanden sein.

Wenn jemand Excel von Grund auf neu öffnet, oder sie die Hilfedatei direkt öffnen, funktioniert alles oben wie erwartet. Wenn ich jedoch versuche, von dem ADDIN zu aktualisieren, tut es das nicht.

Es gibt eine Schaltfläche "Update" auf dem AddIn. Klicken Sie auf diese Schaltfläche, um die Hilfedatei zu öffnen. Die Idee ist, dass wenn die Hilfedatei geöffnet wird, wird automatisch das AddIn aktualisiert.

jedoch die Helper-Code (die alle in Workbook_Open enthalten ist) bei nicht mehr läuft: AddIns (sAddInName) .Installed = False

Es gibt keine Fehler oder irgendetwas. Wenn ich in den Code eintrete, nachdem die Zeile ausgeführt wurde, führt das AddIn seinen BeforeClose() - Code aus, und nachdem es fertig ist, stoppt es einfach, als ob kein Code dahinter wäre (obwohl es da ist).

Relevante-Code

Helper-Code - Protokollierung/Fehlerbehandlung entfernt

Private Sub Workbook_Open() 

    'Load Master Path and AddIn Path 
    Dim sAddInPath As String, sAddInMasterPath As String 
    sAddInPath = Environ$("APPDATA") & "\Microsoft\Addins\TAAA.xlam" 
    sAddInMasterPath = "...\TAAA - AddIn.xlam" 

    'If TAAA Helper Isn't Auto-Open, Set to Auto-Open 
    If ThisWorkbook.Path <> Application.StartupPath Then 
     ThisWorkbook.SaveAs Application.StartupPath & "\" &  ThisWorkbook.Name 
    End If 

    'If AddIn Is Available Then Uninstall It 
    If bAddInAvailableToInstall("TAAA") Then 

     AddIns("TAAA").Installed = False 

-------- IT NACH OBEN LINE STOPPT ------- -

End If 

    'Copying Master AddIn to Local Path 
    FileCopy sAddInMasterPath, sAddInPath 

    'If AddIn Is Unavailable Then Add It 
    If Not bAddInAvailableToInstall("TAAA") Then 
     Dim myAddIn As AddIn 
     Set myAddIn = Application.AddIns.Add(Filename:=sAddInPath,  CopyFile:=True) 
    End If 

    'Installing AddIn 
    AddIns("TAAA").Installed = True 

    ThisWorkbook.Close 
End Sub 

Antwort

0

Ich kam mit einer Bootleg Workaround, falls jemand eine unterdurchschnittliche Lösung für dieses Problem will.

Bootleg Umgehung

Ich nahm den gesamten Code, der nach AddIns läuft (sAddInName) .Installed = False und kopiert sie auf ein neues Verfahren WorkbookOpen_Part2.

Unmittelbar vor der Zeile AddIns (sAddInName) .Installed = False habe ich eine Application.OnTime für Now + 1 Sekunde hinzugefügt, um WorkbookOpen_Part2 auszuführen.

Dann, direkt nach AddIns (sAddInName) .Installed = False ich den Application.OnTime-Aufruf abbrechen.

Auf diese Weise wird der OnTime sofort abgebrochen und läuft nie, wenn der Code nicht merkwürdig stoppt. Wenn der Code seinen seltsamen Halt macht, setzt OnTime eine Sekunde später den Rest des Codes fort.

mdNextCheckTime = Now + TimeValue("00:00:01") 
Application.OnTime mdNextCheckTime, "WorkbookOpen_Part2" 

AddIns("TAAA").Installed = False 

CancelCheck 'This cancels the Application.OnTime 
Verwandte Themen