Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Tab-getrennte Text-Datei erzeugen

Tab-getrennte Text-Datei erzeugen
17.03.2015 19:07:12
Ingo
Hallo
Ich habe hier eine Excel Datei.
Ich möchte gerne die Werte der Spalten AH bis AV in eine Text-Datei schreiben.
Die Werte sollen in der Text-Datei Tab-getrennt sein.
Beim Erstellen der Text-Datei sollen nur die Zeilen berücksichtigt werden, bei denen in Spalte AN "auf Lager" steht.
Könnte Ihr mir dabei helfen, ein entsprechendes VBA Makro zu kreieren?
Oder gibt es da evtl. schon etwas fertiges, was ich versuchen kann anzupassen?
Gruß
Ingo

Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tab-getrennte Text-Datei erzeugen
17.03.2015 19:19:18
Daniel
Hi
der Makrorecorder ist dein Freund.
Speichere die Datei von Hand im entsprechenden Format (du bekommst bei Speichern-Unter die notwendigen Informationen) und zeichne mit dem Recorder auf.
den aufgezeichneten Code kannst du dir anschauen und daraus lernen, wie man den entsprechenden Code schreibt.
für deinen zweiten Wunsch ("auf Lager" in Spalte AN) würde ich so vorgehen.
1. in Spalte AN mit dem Autofilter nach "auf Lager" filtern
2. neue Exceldatei erstellen
3. die gefilterter Liste in die neue Datei kopieren, hierbei werden nur die sichtbaren Zellen übertragen
4. die neue Datei als Textfile speichern und schließen
auch hier gilt: der Recorder ist dein Freund.
Gruß Daniel

Anzeige
AW: Tab-getrennte Text-Datei erzeugen
18.03.2015 09:36:20
Ingo
Hallo Daniel
Vielen Dank für Deine Idee.
Ich habe das nun so umgesetzt, wie Du vorgeschlagen hast.
Dabei ist dann quasi folgender Code herausgekommen.
Funktionieren tut es soweit anscheinend korrekt.
Gibt es da noch Verbesserungs-Potenzial?
Gruß
Ingo
Sub AAA()
' Blattschutz deaktivieren
ActiveSheet.Unprotect
' In Spalte AN mit dem Autofilter nach "auf Lager" filtern
Selection.AutoFilter
ActiveSheet.Range("$A$1:$AV$1000").AutoFilter Field:=40, Criteria1:="auf Lager"
' Neue Exceldatei erstellen
Workbooks.Add
Windows("Angebot.xlsm").Activate
' Spalten AH bis AV markieren
Range("AH1:AV1000").Select
' Markierten Bereich kopieen
Selection.Copy
' Kopierten Bereich in neue Excel-Datei einfügen
Windows("Mappe1").Activate
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
' Inhalt der neuen Excel-Datei speichern als google-shopping.txt
Windows("Mappe1").Activate
Application.CutCopyMode = False
ChDir "C:\Temp"
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="C:\Temp\google-shopping.txt", FileFormat:=xlText,  _
CreateBackup:=False
Application.DisplayAlerts = True
Windows("Angebot.xlsm").Activate
' Die neue Excel-Datei wieder schließen
Windows("google-shopping.txt").Activate
Application.DisplayAlerts = False
ActiveWindow.Close
Application.DisplayAlerts = True
' Filterung aufheben
Selection.AutoFilter
' Blattschutz aktivieren
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
' Nach ganz onel links "scrollen"
Range("A2").Select
Range("A1").Select
ActiveWindow.ScrollColumn = 1
ActiveWindow.ScrollRow = 1
End Sub

Anzeige
AW: Tab-getrennte Text-Datei erzeugen
18.03.2015 14:06:32
Ingo
Hallo Daniel
Ich habe mir das durchgelesen.
Und ich glaube, ich habe in etwa verstanden, worum es geht.
Ich versuche, dass nun mal Schritt für Schritt umzusetzen.
Bei mir steht ja im Anfang noch das hier:
ActiveSheet.Unprotect
Daraus müsste dann das hier werden:
Windows("Angebot").Unprotect
Ist das korrekt?
Gruß
Ingo

Anzeige
Worksheets("Angebot").Unprotect owT
18.03.2015 14:13:10
Rudi

AW: Tab-getrennte Text-Datei erzeugen
18.03.2015 14:20:02
Daniel
Hi
nein, wenn dann: Sheets("Tabellenblattname").Unprotect um das Tabellenblatt zu entsprerren.
mit dem "Windows" arbeitet man in VBA eher selten.
(Tabellenblattname bitte anpassen)
wenn mehrere Dateien geöffnet sind besser:
Workbooks("Dateiname.xlsm").Sheets("Tabellenblattname").Unprotect
wenn du dich auf die Datei beziehen willst, zu der der Code gehört, kannst du statt Workbooks("Dateinname") auch ThisWorkbook verwenden, dann bist du vom Dateinamen unabhängig.
Nach dem Erstellen der neuen Datei (Workbooks.Add) ist immer das neu erstellte Workbook das ActiveWorkbook
Mit ThisWorkbook und ActiveWorkbook kannst du dann beide Dateien gezielt ansprechen, ohne dass du dich um die Dateinamen kümmern musst (du darfst nur nicht das ThisWorkbook aktivieren, der Focus muss auf der neuen Datei bleiben, bis sie geschlossen wird).
Gruß Daniel

Anzeige
AW: Tab-getrennte Text-Datei erzeugen
18.03.2015 14:25:48
Ingo
Ah OK alles klar.
Dann also:
Sheets("Angebot").Unprotect
Nächster Schritt:
Selection.AutoFilter
ActiveSheet.Range("$A$1:$AV$1000").AutoFilter Field:=40, Criteria1:="auf Lager"

wird zu
Selection.AutoFilter
Sheets("Angebot").Range("$A$1:$AV$1000").AutoFilter Field:=40, Criteria1:="auf Lager"
Korrekt?

Anzeige
AW: Tab-getrennte Text-Datei erzeugen
19.03.2015 11:21:11
Daniel
Hi
ja, du solltest nur das darüberstehende "Selection.autofilter" auch noch konkrekt einem Zellbereich zuordnen oder weglassen, wenn es nicht benötigt wird.
Gruß Daniel

AW: Tab-getrennte Text-Datei erzeugen
19.03.2015 18:18:10
Ingo
Stimmt :) Das "Selection.autofilter" resultiert ja auch wieder aus dem mausklick beim Aufzeichnen mit dem Macrorecorder. Kann also weg. Habe ich das richtig verstanden?
Dann zum nächsten Teil meines Codes:
' Neue Exceldatei erstellen
Workbooks.Add
Windows("Angebot.xlsm").Activate
' Spalten AH bis AV markieren
Range("AH1:AV1000").Select
' Markierten Bereich kopieen
Selection.Copy
Das müsste ich doch folgendermaßen zusammenfassen können:
' Neue Exceldatei erstellen
Workbooks.Add
' Spalten AH bis AV kopieren
Copy.Sheets("Angebot").Range("AH1:AV1000").Select

Anzeige
AW: Tab-getrennte Text-Datei erzeugen
20.03.2015 12:33:13
Daniel
HI
im normalfall sollte es unnötig sein.
Gruß Daniel

AW: Tab-getrennte Text-Datei erzeugen
20.03.2015 14:06:07
Ingo
OK
Den folgenden Teil meines Codes ...
' Neue Exceldatei erstellen
Workbooks.Add
Windows("Angebot.xlsm").Activate
' Spalten AH bis AV markieren
Range("AH1:AV1000").Select
' Markierten Bereich kopieen
Selection.Copy
... würde ich so verkürzen ...
' Neue Exceldatei erstellen
Workbooks.Add
' Spalten AH bis AV kopieren
Copy.Sheets("Angebot").Range("AH1:AV1000").Select
... oder muss es so sein?
' Neue Exceldatei erstellen
Workbooks.Add
' Spalten AH bis AV kopieren
Sheets("Angebot").Copy.Range("AH1:AV1000").Select
... oder ist es egal?

Anzeige
AW: Tab-getrennte Text-Datei erzeugen
20.03.2015 14:40:50
Daniel
Hi
musst du so verkürzen:
Workbooks.Add
Workbooks("Angebot.xlsm").Sheets("Angebote").Range("AH1:AV1000").Copy
sollte "Angebote.xlsm" die Datei sein, die auch das Makro enthält auch so:
Workbooks.Add
ThisWorkbook.Sheets("Angebote").Range("AH1:AV1000").Copy
den Tabellenblattnamen musst du auf jeden Fall mit angeben.
nach dem Workbooks.Add ist die neue Datei die aktive Datei und ihr erstes Tabellenblatt das aktive Blatt.
Dies solltest du ausnutzen, wenn du mit dieser Datei arbeiten willst, dann kannst du nämlich einfach diese Datei mit "ActiveWorkbook" bzw das Tabellenblatt mit "ActiveSheet" ansprechen und musst dich nicht darum kümmern, welchen Namen das System der neuen Datei verpasst hat.
Workbooks.Add
ThisWorkbook.Sheets("Angebote").Range("AH1:AV1000").Copy
ActiveSheet.Cells(1, 1).PasteSpecial xpastevalues
ActiveWorkbook.SaveAs ".....", ...
ActiveWorkbook.Close False
Wichtig ist dass du zwischen drin die Selektion nicht wechselst, sonst kommst du leicht durcheinander.
nach dem Schließen der neuen Datei wird die alte autmatsich aktiviert.
Gruß Daniel

Anzeige
AW: Tab-getrennte Text-Datei erzeugen
22.03.2015 10:48:32
Ingo
OK, ich bin jetzt mit den Änderungen hier angelangt:
' Blattschutz deaktivieren
Sheets("Angebot").Unprotect
' In Spalte AN mit dem Autofilter nach "auf Lager" filtern
Sheets("Angebot").Range("$A$1:$AV$1000").AutoFilter Field:=40, Criteria1:="auf Lager"
' Neue Exceldatei erstellen
Workbooks.Add
' Spalten AH bis AV kopieren
ThisWorkbook.Sheets("Angebot").Range("AH1:AV1000").Copy
' Kopierten Bereich in neue Excel-Datei einfügen
ActiveSheet.Cells(1, 1).PasteSpecial xpastevalues
Aber da muss irgendwie ein Fehler drin sein.
Ich fürchte, ich habe da auch gerade ein Brett vor dem Kopf.
Deine Erklärungen habe ich eigentlich verstanden.
Würde ich jedefalls meinen :-)
Nach dem Workbooks.Add ist doch die neue Datei die aktive Datei.
Mit dem

ThisWorkbook.Sheets("Angebot").Range("AH1:AV1000").Copy
spreche ich doch die Datei Angebot.xlsm an, wobei die neue Datei immer noch die aktive Datei bleibt.
Somit müsste doch mit

ActiveSheet.Cells(1, 1).PasteSpecial xpastevalues
diese neue Datei angesprochen werden.
Oder sehe ich das jetzt falsch?
Vielleicht liegt im folgenden der Hase begraben.
Die Datei aus der ich die Spalten kopieren will und in der auch das Makro ist: Angebot.xlsm
Das betreffende Tabellenblatt: Angebot
Vielleicht werde ich da was durcheinander, weil Dateiname und Tabellenblattname gleich sind?

Anzeige
AW: Tab-getrennte Text-Datei erzeugen
23.03.2015 07:38:34
Daniel
Hi
du hast das "xpastevalues" falsch geschrieben, es muss heissen: "xlpastevalues"
kleiner Tipp: VBA-Schlüsselwörter enthalten immer mindestens einen Grossbuchstaben.
Wenn du jetzt so ein Schlüsselwort durchgängig mit Kleinbuchstaben schreibst und der VBA-Editor erkennt es, dann passt er Automatsich die Gross/Kleinschreibung der Buchstaben an, dh es wird daraus "xlPasteValues".
bleiben die buchstaben jedoch klein, dann hat der VBA-Editor das Schlüsselwort nicht erkannt, was meistens daran liegt, dass du einen Tipfehler gemacht hast.
Ausserdem bietet dir der VBA-Editor diverse Eingabehilfen, um solche Schreibfehler zu vermeiden.
Gruß Daniel

Anzeige
AW: Tab-getrennte Text-Datei erzeugen
23.03.2015 12:18:28
Ingo
Ahhh alles klar.
So, nun bin ich fast fertig, denke ich :)
Mit folgendem hebe ich diese Filterfunktion wieder auf.
Also so, dass diese kleinen Auswahldreiecke in den Spaltenköpfen wieder verschwinden.
' Filterung aufheben
Selection.AutoFilter

Sollte man das lieber anders machen?
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Tab-getrennte Text-Datei in Excel erstellen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und lade die Datei, aus der du Daten exportieren möchtest.
  2. Blattschutz deaktivieren: Setze den Blattschutz mit folgendem Befehl außer Kraft:
    Sheets("Angebot").Unprotect
  3. Filter auf die Daten anwenden: Wende den Autofilter auf die Spalte AN an, um nur die Zeilen anzuzeigen, in denen "auf Lager" steht:
    Sheets("Angebot").Range("$A$1:$AV$1000").AutoFilter Field:=40, Criteria1:="auf Lager"
  4. Neue Exceldatei erstellen:
    Workbooks.Add
  5. Daten kopieren: Kopiere die Spalten AH bis AV:
    ThisWorkbook.Sheets("Angebot").Range("AH1:AV1000").Copy
  6. Daten in die neue Datei einfügen:
    ActiveSheet.Cells(1, 1).PasteSpecial Paste:=xlPasteValues
  7. Text-Datei speichern: Speichere die neue Datei im Tab-getrennten Format:
    ActiveWorkbook.SaveAs Filename:="C:\Temp\google-shopping.txt", FileFormat:=xlText, CreateBackup:=False
  8. Blattschutz wieder aktivieren:
    Sheets("Angebot").Protect

Häufige Fehler und Lösungen

  • Fehler: Der Befehl xpastevalues wurde falsch geschrieben.

    • Lösung: Es muss xlPasteValues heißen. Achte darauf, dass VBA-Schlüsselwörter immer mindestens einen Großbuchstaben enthalten.
  • Fehler: Die Filterung wird nicht richtig aufgehoben.

    • Lösung: Verwende anstelle von Selection.AutoFilter besser:
      Sheets("Angebot").AutoFilterMode = False

Alternative Methoden

  1. Makrorecorder: Du kannst den Makrorecorder verwenden, um die Schritte automatisch aufzuzeichnen und den generierten Code zu bearbeiten.
  2. Direktes Speichern: Anstatt die Daten in eine neue Datei zu kopieren, kannst du die gesamte Tabelle direkt als Text-Datei speichern, indem du den Export direkt in die gewünschte Datei machst.

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie man Tabulatoren in Excel einfügt und Daten tabstopp getrennt speichert:

Sub ExportTabSeparated()
    Sheets("Angebot").Range("A1:Z100").AutoFilter Field:=1, Criteria1:="auf Lager"
    Workbooks.Add
    ThisWorkbook.Sheets("Angebot").Range("AH1:AV1000").Copy
    ActiveSheet.Cells(1, 1).PasteSpecial Paste:=xlPasteValues

    ' Speichern mit Tabstopps
    ActiveWorkbook.SaveAs Filename:="C:\Temp\export.txt", FileFormat:=xlText, CreateBackup:=False
    Close ActiveWorkbook
End Sub

Tipps für Profis

  • Verwende ThisWorkbook: Damit vermeidest du Probleme, wenn die Datei umbenannt wird. So bleibt dein Code stabil.
  • Tabulatoren verwenden: Wenn du Text mit Tabulatoren in Excel speichern möchtest, stelle sicher, dass du das richtige Dateiformat wählst, um Tabstopps zu nutzen.
  • Debugging: Nutze die Debugging-Funktionen in VBA, um Fehler schneller zu finden. Füge Debug.Print zu deinem Code hinzu, um Variablenwerte während der Ausführung zu überprüfen.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die Daten korrekt gespeichert werden?
Überprüfe den Dateipfad und das Format, bevor du speicherst. Stelle sicher, dass du die Datei im richtigen Tab-getrennten Format speicherst.

2. Was passiert, wenn ich den Blattschutz nicht deaktiviere?
Wenn der Blattschutz aktiv ist, kannst du keine Änderungen an den Zellen vornehmen, und das Kopieren der Daten wird fehlschlagen.

3. Kann ich auch mehrere Blätter gleichzeitig exportieren?
Ja, du kannst eine Schleife verwenden, um mehrere Blätter in einer neuen Datei zu speichern, indem du den Prozess für jedes Blatt wiederholst.

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