Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

batch-file beim Speichern der xls-Datei starten





Frage

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 1 von coros

Hallo Jojo,

also bei mir heißt das Ereignis

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)


und nicht

Private Sub WorkbookBeforeSave(ByVal Wb As Workbook, _
ByVal SaveAsUI As Boolean, Cancel As Boolean)


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

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

Vielen Dank euch beiden!
Das waren genau die Hinweise, die ich brauchte - es funktioniert!

Gruß
Jojo

Antwort 4 von jojo5

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

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

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

Danke, hat mir auch geholfen!

Gruß peko