batch-file beim Speichern der xls-Datei starten
Hallo,
ich habe eine sehr große xls-Datei, auf welche viele user zugreifen. Da die Datei aus diesen beiden Gründen schon ein paar Mal "zerstört" wurde, möchte ich sie bei jedem Speichern im Hintergrund per bat-file weg sichern. Als 1. Hilfe habe ich mir folgenden code aus dem Internet kopiert, den ich dann entsprechend anpassen wollte:
Private Sub WorkbookBeforeSave(ByVal Wb As Workbook, _
ByVal SaveAsUI As Boolean, Cancel As Boolean)
a = MsgBox("Do you really want to save the workbook?", vbYesNo)
If a = vbNo Then Cancel = True
End Sub
Leider wird dieses Makro scheinbar überhaupt nicht aufgerufen (auf jeden Fall erscheint die MsgBox nicht). Wo liegt denn da der Fehler?
Bzw. hat jemand eine bessere Lösung, um die Datei regelmäßig als Kopie an einen anderen Ort zu speichern?
Vielen Dank schon mal, Jojo
Antwort schreiben
Antwort 1 von coros vom 08.10.2019, 12:58 Options
Hallo Jojo,
also bei mir heißt das Ereignis
[b]Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)[/b]
und nicht
[b]Private Sub WorkbookBeforeSave(ByVal Wb As Workbook, _
ByVal SaveAsUI As Boolean, Cancel As Boolean)[/b]
Beachte die Schreibweise, denn daran wird es liegen.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 2 von meinTipp vom 08.10.2019, 12:59 Options
Hallo JoJo,
die Routine muss im Modul von "DieseArbeitsmappe" stehen und folgendermassen heissen:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Beachte "_" nach Workbook.
Gruss Rolf
Antwort 3 von jojo5 vom 08.10.2019, 14:41 Options
Vielen Dank euch beiden!
Das waren genau die Hinweise, die ich brauchte - es funktioniert!
Gruß
Jojo
Antwort 4 von jojo5 vom 08.10.2019, 14:47 Options
Jetzt bin ich bei meinem nächsten Problem. Ich möchte, dass das batch-file im Hintergrund läuft, also das DOS-Fenster nicht sichtbar ist. Sämtliche Tipps funktionieren nicht (Verknüpfung minimiert anzeigen etc.).
Folgendermaßen rufe ich das batch-file auf:
Dim Pfad As String
Pfad = ThisWorkbook.Path & "\Sicherungen\" & "Testfaelle_sic.bat"
'Batchdatei aufrufen
Shell Pfad, 1
Kann ich hier evtl. die minimierte Anzeige einbauen?
Danke, Gruß
Jojo
Antwort 5 von son_quatsch vom 08.10.2019, 15:07 Options
Dein Code muss folgendermaßen erweitert werden:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
Const SW_HIDE = 0
Const SW_MINIMIZE = 6
Const SW_SHOWMINIMIZED = 2
Const SW_SHOWMINNOACTIVE = 7
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Pfad As String
Pfad = ThisWorkbook.Path & "\Sicherungen\" & "Testfaelle_sic.bat"
ShellExecute 0, "open", Pfad, "", "", SW_SHOWMINNOACTIVE
End Sub
Wenn Dir das nicht gefällt, kannst Du statt SW_SHOWMINNOACTIVATE auch eine der anderen Werte ausprobieren, z.B. SW_HIDE
Antwort 6 von jojo5 vom 08.10.2019, 15:18 Options
Hallo,
danke, in der Zwischenzeit habe ich - sogar in der VB-Hilfe von Excel!!! - eine ganz einfache Lösung gefunden:
Anstelle
"Shell Pfad, 1"
einfach
"Shell Pfad, 6"
Das war's ...
Trotzdem vielen Dank, Gruß
Jojo
Antwort 7 von peko vom 08.10.2019, 20:07 Options
Danke, hat mir auch geholfen!
Gruß peko