VBA-Problem, Macro zeigt Fehler

Hallo zusammen, habe wieder einmal ein VBA-Problem mit meiner Tabelle.
Bis zum 23.11.17 funktionierte alles bestens. Ich schiebe es auf ein update welches gemacht wurde. Hoffentlich liege ich falsch.
Meine Excel-Version ist die 2013er auf Win10.

Mein Problem ist die Fehlermeldung:

Fehler01

Nach dem Debuggen kommt:

Der Sinn dieses Macros ist, dass nach der Veränderung der Tabelle eine Sicherheitskopie an einem anderen Ort mit gespeichert wir.

Danke im Voraus, Bernd

Hallo,

der VB Code sieht auf den ersten Blick eigentlich ganz OK aus.
Interessanter als der Code, wäre der Inhalt der Variable „backup_file“ zum Zeitpunkt des Copy.

Der Fehler deutet darauf hin, das entweder etwas mit dem Pfad nicht stimmt (ungültiges Zeichen), der Pfad nicht existiert, oder es Probleme mit dem Rechten im Zielverzeichnis gibt.

Also mal überprüfen was in der variable drin steht. Ich vermute mal das da irgend ein „:“ aus der „Zeitzerlegung“ eingewandert ist.

btw: das Gefummel mit der Date/ Zeit und Mid… kann man sich ersparen:
Format(Now(), „dd_mm_yyyy_hhnnss“) macht genau das gleiche in einer Anweisung, und ist unabhängig von jeglicher Lokalisierungseinstellung das Systems.

Außerdem ist es guter Stil, mittels fso.FolderExists(verzeichnisname) vor dem Kopieren zu prüfen ob das Verzeichnis auch existiert, und falls nicht einen Fehler auszugeben oder mittels MkDir(verzeichnisname) es anzulegen.

Und eine Fehlerbehandlung (On Error GoTo) sollte man prinzipiell implementieren.

Tschau
Peter

Hallo Peter_a00871,
wenn ich dir verrate dass die Arbeitsmappe aus knapp 200 Tabellenblätter und X-Macros besteht und ca. 8 MB groß ist und ich NULL-Ahnung vom VBA habe klingt dass gut für mich was du geschrieben hast.
Ich habe einmal den ges. Code hier:

Option Explicit
Private cfile, fso, datum, zeit, stunden, minuten, sekunden, file_name, base_name, backup_file
Private Sub Workbook_Activate()
Call prcStartTimer
End Sub

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Call prcStartTimer
End Sub

Private Sub Workbook_BeforeXmlExport(ByVal Map As XmlMap, ByVal Url As String, Cancel As Boolean)

End Sub

'Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Call prcStartTimer
'End Sub

Private Sub Workbook_Deactivate()
Call prcStopTimer
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Call prcStartTimer
End Sub

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Call prcStartTimer
End Sub

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Call prcStartTimer
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Call prcStartTimer
End Sub

Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
Call prcStartTimer
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Call prcStartTimer
End Sub

Private Sub Workbook_WindowActivate(ByVal Wn As Window)
Call prcStartTimer
End Sub

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Call prcStopTimer
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call prcStartTimer
Cancel = True
Application.EnableEvents = False
If SaveAsUI = True Then
cfile = Application.GetSaveAsFilename(ActiveWorkbook.Name) & „xlsm“
If cfile <> False Then
ActiveWorkbook.SaveAs Filename:=cfile
End If
Else
ActiveWorkbook.Save
End If

ActiveWorkbook.Save
Application.EnableEvents = True

Set fso = VBA.CreateObject(„Scripting.FileSystemObject“)
datum = Date
zeit = Time
stunden = Left$(zeit, 2)
minuten = Mid$(zeit, 4, 2)
sekunden = Right$(zeit, 2)
zeit = stunden & minuten & sekunden
file_name = ActiveWorkbook.FullName
base_name = fso.GetBaseName(ActiveWorkbook.Name)
backup_file = „N:\01 Leitung\05 Austausch\SicherungBSM“ & base_name & „" & Date & "“ & zeit & „.xlsm“
Call fso.CopyFile(file_name, backup_file)

End Sub

Der Pfad: N:\01 Leitung\05 Austausch\SicherungBSM\ für die Kopie ist richtig. Darauf haben auch jeder die Berechtigung des Zugriffes.

Danke

Hallo,

OK , soweit so klar.

Aber 1.
Man sollte Variablen, dort deklarieren wo man sie braucht und mit dem entsprechenden Datentyp.
Nicht

Private cfile, fso, datum, zeit, stunden, minuten, sekunden, file_name, base_name, backup_file

besser in der Prozedur Workbook_BeforeSave

Dim cfile as String
Dim datum as Variant etc.

vor allem

fso as Object
  1. Denn bei deinem Vorgehen wird bei jedem Aufruf der Funktion Workbook_BeforeSave ein neues FileSystem Objekt erzeugt, aber es wird nie zerstört.
    Mann sollte immer wenn man irgendetwas mit CreateObject() erzeugt diese Objekt auch mir = Nothing wieder zerstören.
    Deklariere mal das fso Objekt am Anfang deiner Routine und füge nach dem fso.CopyFile eine Zeile ein:

    Set fso = Nothing

Ich denke mal das sollte dein Problem beheben.
Denn die Fehlernummer für nicht existierende Verzeichnisse oder Dateien sind normalerweise 53 oder 76.
Tschau
Peter