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

VBA - Dateien öffnen -> Wert ersetzen -> Speichern

Forumthread: VBA - Dateien öffnen -> Wert ersetzen -> Speichern

VBA - Dateien öffnen -> Wert ersetzen -> Speichern
02.03.2018 18:52:27
Salocinz
Hallo,
ich als VBA-Laie habe mal eine Frage bzw. eine Bitte:
Ich muss mehrere hundert Dateien (Endung .sch) einmal öffnen, dann jeweils alle "[" und "]" in dem gesamten Dokument durch " " ersetzen und anschließen die Datei als .xlsx wieder mit gleicher Nummerierung wieder abspeichern.
Die Dateien "Datei1"-"Datei1000" liegen alle im selben Verzeichnis "C:\Desktop\Beispiel".
In jeder Datei sollen alle eckigen Klammern "[" und "]" gelöscht bzw. durch ein Leerzeichen ersetzt werden.
Abgespeichert sollen die Dateien dann auch wieder "Datei1.xlsx" - "Datei1000.xlsx" heißen und im Verzeichnis "C:\Desktop\Beispiel\Konvertiert" liegen.
Es wäre wirklich super, wenn mir jemand helfen könnte!!!!
LIEBEN DANK LEUTE!!!!
Salocinz
Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Crosspost ohne Hinweis.
02.03.2018 19:53:45
Werner
Hallo,
wenn schon Crossposting, dann bitte die Beiträge in den verschiedenen Foren verlinken.
Gruß Werner
AW: VBA - Dateien öffnen -> Wert ersetzen -> Speichern
02.03.2018 20:29:08
Salocinz
Entschuldigung, diese Regel war mir nicht bekannt!
Wie schon gesagt, ich bin wirklicher VBA-Laie und weiß mir nicht anders zu helfen als euch zu fragen.
Ich hoffe Ihr könnte mir dennoch helfen!
PS: ich habe die Frage noch in Folgenden Foren gestellt:
http://www.vba-forum.de/Forum/View.a...peichern_unter
https://www.herber.de/forum/ am 2018-03-02 18:52:27
Dankeschön!
Anzeige
AW: VBA - Dateien öffnen -> Wert ersetzen -> Speichern
02.03.2018 21:39:21
Werner
Hallo,
habe mal ein wenig gegoogelt. Scheint mir ja eine Datei aus einem CAD-Programm zu sein. Dürfte sich nicht mit Excel öffnen lassen.
Gruß Werner
AW: VBA - Dateien öffnen -> Wert ersetzen -> Speichern
03.03.2018 13:51:54
Salocinz
Hallo Werner,
die Dateien lassen sich problemlos über "Öffnen mit" mit Excel öffnen. Ich habe eine Beispieldatei angehängt.
https://www.herber.de/bbs/user/120188.zip
Vielen Dank für die Bemühungen!
Anzeige
AW: VBA - Dateien öffnen -> Wert ersetzen -> Speichern
03.03.2018 14:54:09
Werner
Hallo,
hier mal nur für eine Datei. Teste mal, ob das Ergebnis dann so aussehen soll. Das ist jetzt noch nicht für alle Dateien im Verzeichnis und auch noch ohne das anschließende Speichern als Excel-Datei.
Sub Makro1()
Dim loLetzte As Long
Workbooks.OpenText Filename:="C:\Desktop\Beispiel\Beispiel1.sch", Origin _
:=xlMSDOS, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(0, 1), _
TrailingMinusNumbers:=True
With ActiveSheet
loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range(.Cells(1, 1), .Cells(loLetzte, 1)).Replace What:="[", Replacement:=" ", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
.Range(.Cells(1, 1), .Cells(loLetzte, 1)).Replace What:="]", Replacement:=" ", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
.Columns("A:A").AutoFit
End With
End Sub
Gruß Werner
Anzeige
AW: VBA - Dateien öffnen -> Wert ersetzen -> Speichern
03.03.2018 15:54:45
Salocinz
Hallo Werner,
ja also das sieht schonmal sehr gut aus!!!! Vielen Dank schon einmal!
Allerdings schreibt er nun alle Einträge in die erste Spalte A, wobei die Einträge etwas unregelmäßig (manchmal ohne, manchmal mit Leerzeichen getrennt werden).
Es soll jedoch immer nur eine Zahl (als 10 ist auch eine Zahl) wie in der Datei .sch in einer Spalte stehen.
Hier das Ergebnis, dass sich bei mir ergibt:
https://www.herber.de/bbs/user/120189.xlsx
Anzeige
AW: VBA - Dateien öffnen -> Wert ersetzen -> Speichern
03.03.2018 16:18:20
Werner
Hallo,
sorry, das verstehe ich jetzt nicht wirklich. Es bringt mir nichts, wenn du mir die Datei hier hochlädst, so wie sie nach dem ersetzen der [] raus kommt (wenn das so nicht deinen Vorstellungen entpricht).
Dann ändere doch die hochgeladene Datei einmal händisch so ab, wie du dir das Ergebnis vorstellst und lade sie noch einmal hoch.
Gruß Werner
Anzeige
AW: VBA - Dateien öffnen -> Wert ersetzen -> Speichern
03.03.2018 17:46:26
Werner
Hallo,
meinst du so? Tabstop getrennt?
Da ist jetzt schon die Erweiterung zum Speichern im gleichen Verzeichnis mit dabei.
Bitte die Datei, von der aus du das Makro aufrufst, vor der ersten Makroausführung im gleichen Verzeichnis speichern wie die .sch Dateien.
Sub Makro1()
Dim loLetzte As Long, loSpalte As Long
Dim strPath As String, strDateiname As String
Application.ScreenUpdating = False
Workbooks.OpenText Filename:="C:\Desktop\Beispiel\Beispiel1.sch", 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
strPath = ThisWorkbook.Path & "\"
strDateiname = .Name
.SaveAs Filename:=strPath & strDateiname, FileFormat:=xlWorkbookDefault
ActiveWorkbook.Close
End With
Application.ScreenUpdating = True
End Sub
Gruß Werner
Anzeige
AW: VBA - Dateien öffnen -> Wert ersetzen -> Speichern
03.03.2018 20:20:33
Salocinz
Hallo Werner,
wow, vielen vielen Dank! Das sieht echt super aus!
Gäbe es noch die Möglichkeit, eine Schleife einzubauen, sodass das automatisch für eine Anzahl Dateien mit fortlaufender Nummer (Beispiel1, Beispiel2,...Beispiel100) durchlaufen wird?
Vielen Dank für deine Mühe!!
Falls du magst, würde ich dir gerne für deine Hilfe ein kleines "Dankeschön" (via Paypal) schicken, du hast mir wirklich sehr viel Zeit gespart!
Schreib mir doch einfach eine Mail an "salocinz@web.de" =)
LG und schönen Abend
Salocinz
Anzeige
AW: VBA - Dateien öffnen -> Wert ersetzen -> Speichern
03.03.2018 20:24:11
Werner
Hallo,
das mit der Schleife kommt dann noch - aber heute nicht mehr. Wollte erst mal warten, ob alles andere so weit passt.
Mal schauen, ob ich morgen noch dazu komme.
Gruß Werner
AW: VBA - Dateien öffnen -> Wert ersetzen -> Speichern
04.03.2018 10:18:43
Werner
Hallo,
hier jetzt mit einer Schleife über alle Dateien im Ordner mit der Endung .sch
Den Zielordner habe ich jetzt im Code direkt angegeben. Es ist also egal, in welchem Ordner sich die Datei mit dem Makro befindet.
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
Else
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
strFileQuelle = Dir()
End With
Loop
End If
Application.ScreenUpdating = True
End Sub
Im Code ist aber keine Prüfung eingebuat, ob der/die Ordner schon existiert.
Gruß Werner
Anzeige
und wenn es passt....
04.03.2018 10:22:32
Werner
Hallo,
...dann bitte nicht vergessen in den anderen Foren mitzuteilen, dass sich die Sache erledigt hat.
Gruß Werner
AW: und wenn es passt....
05.03.2018 20:07:22
Salocinz
Vielen vielen Dank!!!!
Es funktioniert perfekt!
Ich habe in den anderen Foren den Status auf "erledigt" gesetzt!
Gerne u.Danke für die Rückmeldung. o.w.T.
05.03.2018 23:45:14
Werner
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

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.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Füge ein neues Modul hinzu:
    • Klicke mit der rechten Maustaste auf "VBAProject (DeineArbeitsmappe)".
    • Wähle "Einfügen" und dann "Modul".
  3. 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
  1. Ändere die Pfade in den Variablen strPathQuelle und strPathZiel, falls nötig.
  2. 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:

  1. Angenommen, Du hast 100 Dateien mit den Namen Beispiel1.sch, Beispiel2.sch, ... , Beispiel100.sch.
  2. 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.

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