Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Laufzeitfehler 70: Geht es besser ihn abzufangen?

Laufzeitfehler 70: Geht es besser ihn abzufangen?
Holger,
Guten Morgen liebes Forum,
ich habe unten stehendes Makro. Dieses erstellt automatisch ein Backup der Datei, zippt dieses und löscht die Kopie dann wieder weg. Genau hier kommt ein Laufzeitfehler 70. Anscheinend ist das Makro zu schnell oder Excel löst den Zugriff von der Datei zu langsam, jedenfalls kommt bei der Zeile mit KILL ... ein Laufzeitfehler. Ich habe nun einfach eine Application Wait eingebaut von einer Sekunde und so läft das Makro.
Für mich ist das jedoch etwas unbefriedigend. Erstens, was wenn es doc mal länger als eine Sekunde dauert. Zweitens ist es nicht sauber gelöst.
Mein Anspruch wäre, die Freigabe des Files vor dem Kill Befehl zu erzwingen, um so das Problem zu lösen.
Hat jemand hierzu eine Idee oder einen Code?
Option Explicit
Option Private Module
Const BDir = "Backup Files"
Sub GenerateBackUp()
Dim wbMaster As Workbook
Dim strBackUpPath As String, strBackUpFile As String, strSysInfo As String, _
strRARName As String
Set wbMaster = ThisWorkbook
ChDrive wbMaster.Path
ChDir wbMaster.Path
If IsDiskFolder(BDir) = False Then
MkDir BDir
End If
strRARName = Format(Date, "DDDD") & " " & Date
strBackUpFile = Left(wbMaster.Name, InStr(1, wbMaster.Name, ".") - 1) & _
" " & strRARName & _
Mid(wbMaster.Name, InStr(1, wbMaster.Name, "."))
strBackUpPath = wbMaster.Path & "\" & BDir & "\" & _
strBackUpFile
If IsDiskFolder(strBackUpPath) = True Then Kill strBackUpPath
ActiveWorkbook.SaveCopyAs Filename:=strBackUpPath
If CreateRAR(Chr(34) & strBackUpFile & Chr(34), "RAR", wbMaster.Path & "\" & BDir, Date & ". _
_
rar") = True Then
Application.Wait (Now + TimeValue("0:00:01"))
Kill strBackUpPath
Else
MsgBox "Fehler beim Zippen des folgenden Files " & Chr(10) & _
strBackUpPath & Chr(10) & _
", bitte prüfen!", vbCritical
End If
Set wbMaster = Nothing
End Sub

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Laufzeitfehler 70: Geht es besser ihn abzufangen?
18.02.2011 12:54:59
ransi
HAllo
ICh kann mir das alles nicht nachbauen, aber schau mal hier:
Theoretisch (weil ungetestet) müsste das laufen.
On Error Resume Next
Do
    Err.Clear
    'Err.Raise 70
    Kill deineDatei
Loop Until Err = 0
On Error GoTo 0

ransi
Anzeige
Wäre genial wenn ...
18.02.2011 13:43:26
Holger,
Hi Ransi,
Es klappt!
Aber falls es keinen Error gibt (was auch passiert, keine Ahnung warum Excel manchmal die Datei sofort freigibt und dann wieder einen Bruchteil später), wie frage ich das ab?
Kann ich nicht abfragen ob es überhaupt einen Error gibt?
AW: Wäre genial wenn ...
18.02.2011 14:07:38
ransi
HAllo
Wenn es keinen Error gibt ist doch Err=0
Dann wird doch auch gekillt ?!?!?
Die Prüfung kannst du dir dann schenken.
Aber egal.
Eine Prüfung könnte so aussehen:
On Error Resume Next
Kill deineDatei
If Err <> 0 Then
    Do
        Err.Clear
        'Err.Raise 70
        Kill deineDatei
    Loop Until Err = 0
End If
On Error GoTo 0

Wenn du prüfen willst ob die Datei noch offen ist, kannst du auch sowas versuchen:
http://www.online-excel.de/excel/singsel_vba.php?f=54
ransi
Anzeige
Moooooment ;)
18.02.2011 14:32:58
Holger,
Hi ransi,
ok, um das zu verstehen. Egal, ob error oder nicht, die Zeile KILL wird immer aufgerufen so wie ich es programmiert habe:
    If CreateRAR(Chr(34) & strBackUpFile & Chr(34), "RAR", wbMaster.Path & "\" & BDir, Date & ". _
rar") = True Then
On Error Resume Next
Do
Err.Clear                                   'Err.Raise 70
Kill strBackUpPath
Loop Until Err = 0
On Error GoTo 0
Else
MsgBox "Fehler beim Zippen des folgenden Files " & Chr(10) & _
strBackUpPath & Chr(10) & _
", bitte prüfen!", vbCritical
End If

Anzeige
AW: Moooooment ;)
18.02.2011 14:48:47
ransi
HAllo
Egal, ob error oder nicht, die Zeile KILL wird immer aufgerufen
Jo, genau das ist ja der Sinn der Übung. ;-)
Wenn die Datei gekillt werden kann wird gekillt, und dann raus der Loop.
Wenn nicht läuft Kill in einen Fehler. (70)
Der wird vor den näxten Kill-Versuch aber wieder gelöscht um zu sehen ob der Kill erfolgreich war.
ransi
Anzeige
Genial! Danke Ransi!" k.t.
18.02.2011 14:49:41
Holger,
;
Anzeige
Anzeige

Infobox / Tutorial

Laufzeitfehler 70 in VBA: Fehler abfangen und beheben


Schritt-für-Schritt-Anleitung

Um den Laufzeitfehler 70 (Zugriff verweigert) in deinem VBA-Projekt abzufangen, kannst du das folgende Beispiel verwenden:

  1. Öffne den VBA-Editor in Excel (ALT + F11).
  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" > Einfügen > Modul).
  3. Kopiere den nachfolgenden Code und füge ihn in das Modul ein:
Option Explicit

Sub HandleError70()
    On Error Resume Next
    ' Versuche, die Datei zu löschen
    Kill "deinDateipfad\deineDatei.txt"

    ' Prüfe den Error-Code
    Do While Err.Number = 70 ' Laufzeitfehler 70
        Err.Clear ' Fehler zurücksetzen
        ' Erneuter Versuch, die Datei zu löschen
        Kill "deinDateipfad\deineDatei.txt"
    Loop
    On Error GoTo 0 ' Fehlerbehandlung zurücksetzen
End Sub
  1. Passe den Dateipfad und Dateinamen in der Kill-Anweisung an.
  2. Führe das Makro aus, um zu testen, ob es funktioniert.

Häufige Fehler und Lösungen

  1. Fehler 70: Zugriff verweigert

    • Ursache: Die Datei ist möglicherweise gerade geöffnet oder wird von einem anderen Prozess verwendet.
    • Lösung: Stelle sicher, dass die Datei nicht geöffnet ist, bevor du den Kill-Befehl ausführst. Nutze die oben genannte Fehlerbehandlungsroutine.
  2. Fehler bei der Erstellung der Backup-Datei

    • Ursache: Möglicherweise fehlt der Zielordner.
    • Lösung: Überprüfe mit IsDiskFolder, ob der Zielordner existiert, und erstelle ihn bei Bedarf.
  3. Unvorhersehbare Wartezeiten

    • Ursache: Manchmal benötigt Excel mehr Zeit, um die Datei freizugeben.
    • Lösung: Implementiere eine Schleife, die den Kill-Befehl so lange wiederholt, bis der Fehler nicht mehr auftritt.

Alternative Methoden

Wenn die oben genannten Methoden nicht die gewünschten Ergebnisse liefern, kannst du auch folgende Methoden ausprobieren:

  • Verwende DoEvents: Dies kann helfen, Excel Zeit zu geben, um die Datei freizugeben, bevor du den Kill-Befehl ausführst.
Do While Err.Number = 70
    Err.Clear
    Kill "deinDateipfad\deineDatei.txt"
    DoEvents ' Gibt Excel Zeit, um die Datei freizugeben
Loop
  • Überprüfung, ob die Datei geöffnet ist: Du kannst eine Funktion schreiben, die überprüft, ob eine Datei geöffnet ist, bevor du versuchst, sie zu löschen.

Praktische Beispiele

Hier ist ein einfaches Beispiel, um ein Backup zu erstellen und gleichzeitig den Laufzeitfehler 70 abzufangen:

Sub CreateBackup()
    Dim wbMaster As Workbook
    Dim backupPath As String

    Set wbMaster = ThisWorkbook
    backupPath = "deinBackupPfad\" & wbMaster.Name & ".bak"

    On Error Resume Next
    Kill backupPath ' Versuche, das Backup zu löschen, falls es existiert

    ' Erstelle das Backup
    wbMaster.SaveCopyAs backupPath

    ' Warte auf die Freigabe der Datei
    Do While Err.Number = 70
        Err.Clear
        Kill backupPath
    Loop
    On Error GoTo 0
End Sub

Tipps für Profis

  • Verwende Error-Handling: Immer On Error Resume Next verwenden, um sicherzustellen, dass dein Code nicht bei einem Laufzeitfehler abbricht.
  • Logging: Füge Logging hinzu, um zu protokollieren, wann und wo Fehler auftreten. Das kann bei der Fehlersuche hilfreich sein.
  • Regelmäßige Backups: Denke daran, regelmäßig Backups deiner wichtigen Dateien zu erstellen, um Datenverlust zu vermeiden.

FAQ: Häufige Fragen

1. Was ist der Laufzeitfehler 70? Der Laufzeitfehler 70 tritt auf, wenn der Zugriff auf ein Objekt verweigert wird, beispielsweise wenn eine Datei noch geöffnet ist.

2. Wie kann ich den Fehler 70 umgehen? Du kannst den Fehler abfangen, indem du On Error Resume Next verwendest und dann in einer Schleife versuchst, die Datei zu löschen, bis der Zugriff gewährt wird.

3. Was sollte ich tun, wenn der Fehler weiterhin auftritt? Überprüfe, ob die Datei von einem anderen Prozess verwendet wird, und schließe gegebenenfalls alle Programme, die auf die Datei zugreifen könnten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige