Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1412to1416
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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?

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

Anzeige
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

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?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige