Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA defekte Datei automatisch reparieren?

VBA defekte Datei automatisch reparieren?
06.11.2017 10:29:21
Karsten
Hallo
Ich habe ein Programm geschrieben, was Daten in diverse andere Dateien schreibt, damit das Hauptprogramm schreibgeschützt geöffnet werden kann.
Jetzt ist es in letzter Zeit bereits mehrfach passiert, dass das Programm keine Daten mehr speichern/aufrufen konnte.
Wenn man dann die zugehörige Datei manuell geöffnet hat, kam der Fehler, dass die Datei beschädigt war und repariert werden musste.
Kann man das automatisieren und per VBA machen lassen?
Also das er erst prüft, ob die Dateien in Ordnung sind, falls nicht sie repariert und dann erst die Funktion aufnimmt.
Gruß
K. Jung
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA defekte Datei automatisch reparieren?
06.11.2017 10:33:21
mumpel
Hallo!
Nein, das kann man m.W. nicht. Die Meldung erfolgt ja bevor die Datei (vollständig) geladen wird.
Wenn ständig solche Probleme auftreten kann es an Deinem Code liegen. Wie sieht der Code aus?
Gruß, René
AW: VBA defekte Datei automatisch reparieren?
06.11.2017 12:53:48
Nepumuk
Hallo,
bei der Workbooks_Open - Methode gibt es einen Parameter: CorruptLoad
zu diesem gibt es 3 Möglichkeiten:
xlExtractData
xlNormalLoad
xlRepairFile
Ich würde es mal so versuchen:
Public Sub Beispiel()
    Dim objWorkbook As Workbook
    Dim strPath As String
    strPath = "C:\Ordner\Unterordner\Datei.xlsx"
    Set objWorkbook = Workbooks.Open(Filename:=strPath, CorruptLoad:=xlRepairFile)
    
    
End Sub

Gruß
Nepumuk
Anzeige
AW: VBA defekte Datei automatisch reparieren?
06.11.2017 13:38:55
Karsten
Das werde ich mal probieren, vielen Dank.
Gruß
K. Jung
AW: VBA defekte Datei automatisch reparieren?
07.11.2017 09:10:21
mumpel
Du solltest aber trotzdem versuchen zu klären weshalb es zu diesem Problem kommt. Muss ja eine Ursache haben.
AW: VBA defekte Datei automatisch reparieren?
08.11.2017 05:59:06
Karsten
Das werde ich natürlich machen.
Kommt aber nur 1-2x im Jahr vor, deshalb schwierig.
Gruß
K. Jung
Anzeige
AW: VBA defekte Datei automatisch reparieren?
07.11.2017 08:54:14
mumpel
Was es nicht alles gibt. ;-)
AW: VBA defekte Datei automatisch reparieren?
08.11.2017 06:11:06
Karsten
Hi
So habe ich es jetzt gelöst:
Function IsWorkbookOpen(strWB As String) As Boolean
On Error Resume Next
IsWorkbookOpen = Not Workbooks(strWB) Is Nothing
End Function

Das folgende ist nur ein Teil des Makros, es werden Variabeln beim Aufrufen mitgegeben:
            On Error Resume Next
Workbooks.Open Filename:=Pfad_NOR + CStr(Dateiname) + ".XLSX", ReadOnly:=lesen       _
If IsWorkbookOpen(Dateiname + ".XLSX") Then
Else
Workbooks.Open Filename:=Pfad_NOR + CStr(Dateiname) + ".xlsx", ReadOnly:=lesen,  _
CorruptLoad:=xlRepairFile
Kill "\\L31SRV10\U027\Operations\AR-Betriebstechnik\ar\Schichtwechsel\" &  _
Dateiname & ".xlsx"
Application.DisplayAlerts = False
Workbooks(Dateiname + ".xlsx").SaveAs "\\L31SRV10\U027\Operations\AR- _
Betriebstechnik\ar\Schichtwechsel\" & Dateiname & ".xlsx", AccessMode:=xlShared
Application.DisplayAlerts = True
Workbooks(Dateiname + ".xlsx").Close SaveChanges:=True
Workbooks.Open Filename:=Pfad_NOR + CStr(Dateiname) + ".XLSX", ReadOnly:=lesen
End If

Also, es wird versucht, die Datei zu öffnen.
Wenn es wegen dem Fehler nicht geht, geht er ohne Hinweis zum nächsten Schritt.
Dann wird geprüft, ob die Datei offen ist.
Wenn nicht startet das Reparatur Teil.
1. Reparieren der Datei.
2. Löschen der Datei von der Festplatte.
3. Speichern der Datei incl. der Freigabe aktiviert.
4. Schließen und speichern der Datei.
5. Erneutes öffnen der fehlerfreien Datei.
Vielen Dank für die Hilfe.
Ich begebe mich jetzt auf die Ursachensuche.
Gruß
K. Jung
Anzeige
AW: VBA defekte Datei automatisch reparieren?
07.11.2017 05:58:52
Karsten
Hi
Kann die Freigabe das Problem sein?
Denn der Fehler tritt nur in Dateien auf, wo ich eine Freigabe eingerichtet habe. (Jeder Nutzer schreibt in andere Zellen und nie 2 in die gleiche)
Gruß
K. Jung
;
Anzeige
Anzeige

Infobox / Tutorial

Defekte Excel-Dateien automatisch reparieren mit VBA


Schritt-für-Schritt-Anleitung

  1. Öffne die VBA-Entwicklungsumgebung:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul:

    • Klicke auf Einfügen > Modul.
  3. Füge den folgenden Code ein, um eine beschädigte Excel-Datei zu reparieren:

    Public Sub Beispiel()
       Dim objWorkbook As Workbook
       Dim strPath As String
       strPath = "C:\Ordner\Unterordner\Datei.xlsx"
       Set objWorkbook = Workbooks.Open(Filename:=strPath, CorruptLoad:=xlRepairFile)
    End Sub
  4. Führe den Code aus:

    • Stelle sicher, dass der Pfad zu Deiner Datei korrekt ist und führe das Makro aus.
  5. Testen:

    • Überprüfe, ob die Datei erfolgreich geöffnet und repariert wurde.

Häufige Fehler und Lösungen

  • Fehler: Datei kann nicht geöffnet werden:

    • Überprüfe den Dateipfad und stelle sicher, dass die Datei existiert.
  • Fehler: VBA-Code funktioniert nicht:

    • Stelle sicher, dass Du die richtigen Berechtigungen hast, um die Datei zu öffnen, und dass der Code korrekt geschrieben ist.

Alternative Methoden

  • Excel öffnen und reparieren:

    • Du kannst auch Excel direkt verwenden, um eine beschädigte xlsx-Datei zu reparieren. Gehe zu Datei > Öffnen, wähle die beschädigte Datei aus und klicke auf den kleinen Pfeil neben Öffnen. Wähle Öffnen und Reparieren.
  • Drittanbieter-Software:

    • Es gibt verschiedene Softwarelösungen, die speziell für das Reparieren von Excel-Dateien entwickelt wurden, wie z.B. Stellar Repair for Excel.

Praktische Beispiele

Um eine beschädigte Excel-Datei zu reparieren, kannst Du den folgenden erweiterten Code verwenden, der auch prüft, ob die Datei bereits geöffnet ist:

Function IsWorkbookOpen(strWB As String) As Boolean
    On Error Resume Next
    IsWorkbookOpen = Not Workbooks(strWB) Is Nothing
End Function

Sub RepariereDatei()
    Dim Pfad_NOR As String
    Dim Dateiname As String
    Dim lesen As Boolean
    Pfad_NOR = "C:\Ordner\"
    Dateiname = "Datei"

    On Error Resume Next
    Workbooks.Open Filename:=Pfad_NOR & Dateiname & ".xlsx", ReadOnly:=lesen

    If IsWorkbookOpen(Dateiname & ".xlsx") Then
        ' Datei ist bereits offen
    Else
        Workbooks.Open Filename:=Pfad_NOR & Dateiname & ".xlsx", ReadOnly:=lesen, CorruptLoad:=xlRepairFile
        ' Reparatur und weitere Schritte hier hinzufügen
    End If
End Sub

Tipps für Profis

  • Regelmäßige Sicherungen erstellen: Halte immer Sicherungskopien Deiner wichtigen Excel-Dateien, um Datenverlust zu vermeiden.

  • Fehlerprotokollierung: Implementiere eine Fehlerprotokollierung in Deinem VBA-Code, um Probleme leichter identifizieren zu können.

  • Testen in einer sicheren Umgebung: Teste Deinen Code zunächst mit nicht kritischen Dateien, bevor Du ihn auf wichtigen Dokumenten anwendest.


FAQ: Häufige Fragen

1. Kann ich eine beschädigte Excel-Datei ohne VBA reparieren?
Ja, Du kannst die integrierte Funktion Öffnen und Reparieren in Excel nutzen.

2. Was mache ich, wenn die Datei weiterhin nicht zu öffnen ist?
Falls die Datei weiterhin nicht repariert werden kann, solltest Du eine professionelle Software zur Dateireparatur in Betracht ziehen.

3. Ist es sicher, VBA zur Reparatur von Dateien zu verwenden?
Ja, VBA ist sicher, solange Du den Code aus vertrauenswürdigen Quellen verwendest und darauf achtest, dass er korrekt implementiert ist.

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