Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Update einspielen

Begonnen von Blaupunkt79, März 07, 2026, 09:53:42

⏪ vorheriges - nächstes ⏩

Blaupunkt79

Moin Zusammen,

ich habe eine Excel Datei mit Makros erstellt, die Deutschland im Einsatz ist. Regelmäßig arbeite ich weiter an diesem Tool (Fehlerbeseitigung sowie neue Funktionen).

Bisher bin ich folgendermaßen Vorgegangen, damit alle anderen User ebenfalls von den Erweiterungen profitieren können.

Abgleich der Versionsnummern, bei vorhandener neuer Version, kann der User diese Herunterladen (Firmen Sharepoint), sich einen Ordner auswählen, sein "altes" Tool schließen und per Copy & Paste die neue Version ersetzen, funktioniert erstmal soweit.

Ich bin fälschlicherweise davon ausgegangen, dass diese Vorgehensweise einfach zu bedienen ist, leider tun sich da einige User sehr schwer und es herrscht immer "Panik", sobald die Meldung "Neue Version vorhanden" aufploppt. Mir ist bewußt, dass Menschen mein Tool nur dann nutzen, wenn es für sie einfach zu bedienen ist, diese "Panik" wird also nur dazu führen, dass man es eher ignoriert, anstatt sich damit auseinanderzusetzen.

Welche Vorschläge hättet Ihr, damit ich es dem Enduser noch einfacher machen kann? Sozusagen ein automatisches Ersetzen des Tools durch die neue Version. Nach meinem Verständnis benötige ich dafür ein drittes "Programm/Script", welches den "Tausch" durchführt oder? Ein laufendes Programm kann ich ja nicht ersetzen.

Danke Euch

Grüße



Knobbi38

#1
Klar kannst du ein Script vorschalten. Dafür würde sich AutoIt anbieten.

Alternativ hier ein Pseudocode, den du an deine Verhältnisse anpassen müßtest:
Sub AutoUpdate()
  If FileExists(ActiveWorkbook.FullName & ".upd")  Then
    Dim wkb As Workbook
    Dim curFilename As String
   
    Set wkb = ActiveWorkbook
    curFilename = ActiveWorkbook.FullName
   
    wkb.SaveAs curFilename & ".bak"
    Workbooks.Open curFilename & ".upd"
    ActiveWorkbook.SaveAs curFilename
    wkb.Close SaveChanges:=False
  End If 
End Sub

Knobbi38

Blaupunkt79

Moin Knobbi,

Danke für Dein Input, bin jetzt schon soweit, dass mein "Script" aus dem Excel Tool übernimmt. Ich muss alles in VBA schreiben, um Adminrechte zu umgehen.

Das "Script" arbeitet mit der Workbook_Open Methode und springt direkt in ein Modul rein. Es wird eine Textdatei eingelesen, in der das Excel Tool verschiedene Dateipfade gespeichert hat:
a(0) = Pfad meines "Scriptes"
a(1) = Pfad Alte Version Tool
a(2) = Pfad Neue Version Tool
a(3) = Versionsnummer

Anschließend wird mein altes Tool geschlossen und gelöscht, danach soll die neue Version geladen werden. Allerdings passiert nach dem schließen des alten Tools nichts mehr. Wo liegt der Fehler, ich übergebe doch wieder an mein "Script"? Später soll dann das neue Tool geöffnet werden und mein "Script" sich schließen. Beim Start des neuen Tools erfolgt dann der Hinweis, dass das Update mit Version XY erfolgreich war.

Sub Start()
Dim Jetzt As Workbook
Dim myFSO As Object
Dim FSO As Object
Dim excwb As Workbook
Dim a(4) As String
Set Jetzt = ThisWorkbook
If Dir(ActiveWorkbook.Path & "\U_000001.txt") = "" Then Exit Sub
b = 0
'Textdatei lesen
Dim strDatei As String, strZeile As String
   strDatei = ActiveWorkbook.Path & "\U_000001.txt"
   Open strDatei For Input As #1
   Do Until EOF(1)
      Line Input #1, strZeile
      a(b) = strZeile
      b = b + 1
   Loop
   Close #1
Set excwb = Workbooks.Open(a(1))
excwb.Close SaveChanges:=False
Set excwb = Nothing
Jetzt.Activate

'altes Tool löschen
Kill a(1)
'neues Tool kopieren
myFSO.copyfile a(2), a(1), True
If Dir(ActiveWorkbook.Path & "\U_000001.txt") <> "" Then Kill ActiveWorkbook.Path & "U_000001.txt"
Dim ts As Object  ' TextStream
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
   
strDatei = ActiveWorkbook.Path & "\U_000001.txt"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set ts = FSO.CreateTextFile(strDatei, True)
ts.Writeline "1"
ts.Writeline ActiveWorkbook.Path & "\BLSCC_Master_DB_deutsch.xlsm"
ts.Writeline ActiveWorkbook.Path & "\U_000001.txt"
ts.Writeline a(3)

ts.Close
Set ts = Nothing
Set FSO = Nothing

'neues Tool öffnen
Dim Wksh_Q As Workbook
Dim WkSh_Z As Workbook

Set Wksh_Q = ThisWorkbook
Set WkSh_Z = Workbooks.Open(Filename:=a(1))

Wksh_Q.Close SaveChanges:=False
WkSh_Z.Activate

End Sub