VBA: Dateien öffnen, Wert ersetzen und speichern
Schritt-für-Schritt-Anleitung
Um mehrere Dateien mit der Endung .sch
zu öffnen, die eckigen Klammern [
und ]
zu ersetzen und die Dateien als .xlsx
zu speichern, kannst Du folgendes VBA-Makro verwenden. Achte darauf, dass Du diese Schritte in Excel 2016 oder höher durchführst.
- Öffne Excel und drücke
ALT + F11
, um den VBA-Editor zu starten.
- Füge ein neues Modul hinzu:
- Klicke mit der rechten Maustaste auf "VBAProject (DeineArbeitsmappe)".
- Wähle "Einfügen" und dann "Modul".
- Kopiere den folgenden Code in das Modul:
Option Explicit
Sub Makro1()
Dim loLetzte As Long, loSpalte As Long
Dim strPathQuelle As String, strFileQuelle As String, strExt As String
Dim strPathZiel As String, strFileZiel As String
Application.ScreenUpdating = False
strPathQuelle = "C:\Desktop\Beispiel\"
strExt = "*.sch"
If strPathQuelle = "" Then Exit Sub
strFileQuelle = Dir(strPathQuelle & strExt)
Do While Len(strFileQuelle) > 0
Workbooks.OpenText Filename:=strPathQuelle & strFileQuelle, Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, Tab:=True, TrailingMinusNumbers:=True
With ActiveSheet
loLetzte = .UsedRange.Rows.Count
loSpalte = .UsedRange.Columns.Count
.Range(.Cells(1, 1), .Cells(loLetzte, loSpalte)).Replace What:="[", Replacement:=" ", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
.Range(.Cells(1, 1), .Cells(loLetzte, loSpalte)).Replace What:="]", Replacement:=" ", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
.Range(.Cells(1, 1), .Cells(1, loSpalte)).EntireColumn.AutoFit
strPathZiel = "C:\Desktop\Beispiel\Konvertiert\"
strFileZiel = .Name
.SaveAs Filename:=strPathZiel & strFileZiel, FileFormat:=xlWorkbookDefault
ActiveWorkbook.Close
End With
strFileQuelle = Dir()
Loop
Application.ScreenUpdating = True
End Sub
- Ändere die Pfade in den Variablen
strPathQuelle
und strPathZiel
, falls nötig.
- Führe das Makro aus, um die Dateien zu verarbeiten.
Häufige Fehler und Lösungen
- Fehler beim Öffnen der Datei: Stelle sicher, dass die Dateiendung korrekt ist und die Dateien im angegebenen Verzeichnis liegen.
- Speicherfehler: Überprüfe, ob der Zielordner existiert. Das Makro erstellt diesen nicht automatisch.
- Ungültige Zeichen: Wenn in den Dateinamen ungültige Zeichen enthalten sind, kann Excel die Datei nicht speichern. Achte darauf, dass die Dateinamen nur zulässige Zeichen enthalten.
Alternative Methoden
Wenn Du keine VBA-Programmierung verwenden möchtest, kannst Du auch Folgendes ausprobieren:
- Power Query: Du kannst Power Query verwenden, um Daten aus den
.sch
-Dateien zu importieren und die eckigen Klammern durch Leerzeichen zu ersetzen. Dies erfordert jedoch manuelle Schritte für jede Datei.
- Textbearbeitung: Öffne die Dateien in einem Texteditor, um die eckigen Klammern zu ersetzen, und speichere sie anschließend manuell in Excel.
Praktische Beispiele
Hier ist ein Beispiel für den Einsatz des Makros:
- Angenommen, Du hast 100 Dateien mit den Namen
Beispiel1.sch
, Beispiel2.sch
, ... , Beispiel100.sch
.
- Nach dem Ausführen des Makros werden diese Dateien in
C:\Desktop\Beispiel\Konvertiert\
als Beispiel1.xlsx
, Beispiel2.xlsx
, usw. gespeichert, wobei alle eckigen Klammern entfernt wurden.
Tipps für Profis
- Testen: Teste das Makro zuerst mit einer kleinen Anzahl von Dateien, um sicherzustellen, dass alles wie gewünscht funktioniert.
- Backup: Erstelle ein Backup der Originaldateien, bevor du das Skript ausführst.
- Erweiterungen: Du kannst das Skript erweitern, um auch andere unerwünschte Zeichen zu ersetzen oder zusätzliche Datenverarbeitungsfunktionen hinzuzufügen.
FAQ: Häufige Fragen
1. Wie kann ich das Makro für eine andere Dateiendung anpassen?
Ändere einfach die Variable strExt
in den gewünschten Dateityp, z.B. strExt = "*.txt"
.
2. Was mache ich, wenn ich eine Fehlermeldung bekomme?
Überprüfe die Pfade und stelle sicher, dass die Dateien im richtigen Format vorliegen.
3. Kann ich das Makro für andere Ordner verwenden?
Ja, ändere einfach die strPathQuelle
und strPathZiel
Variablen auf die entsprechenden Pfade.