barashnukor
Goto Top

Excel 2007 hrausschreiben von Spalteninhalten

Hallo!

Ich arbeite mit Excel 2007 und hätte da jetzt eine Frage. Ist es möglich, dass ich Inhalte aus einer Spalte per Makro herausschreiben lasse, in eine Textdatei rein, und zwar so, dass in der Textdatei dann pro Zeile immer nur ein Eintrag ist?

Wie sieht mein Excel ca aus?
Also das Excelblatt wird sagen wir mal von Spalte A-S mit Daten befüllt sein. Und das bis ca in die 100erste Zeile. Jetzt will ich alle Einträge aus Spalte T in einem Textfile haben, das irgendwo liegen kann (wo ich natürlich Schreibberechtigung habe.

Ist das möglich? Wenn ja, kann mir vielleicht einer die Lösung posten?

Wäre wirklich super!

LG Barashnukor alias Stefan
Ps.: Danke schon mal im vorraus

Content-Key: 116255

Url: https://administrator.de/contentid/116255

Ausgedruckt am: 29.03.2024 um 10:03 Uhr

Mitglied: h1e15
h1e15 18.05.2009 um 08:10:50 Uhr
Goto Top
Heyho Stefan...
...ich würde mir das nicht so schwer machen und das mit nem Makro machen.
Markier einfach den ganze Spalte T. Dann machste Copy - Paste in eine ganz normale .txt und dann nochmal Copy - Paste in Word.
Fertig ;)

mfg h1e
Mitglied: barashnukor
barashnukor 18.05.2009 um 08:16:53 Uhr
Goto Top
Hallo!

Ist für einen Prozess in der Firma, und ja, mir ist klar, dass es sicher leichter geht mit copy Paste, aber da diesen Teil des Prozesses, eine andere Abteilung machen soll, und es einfacher ist, ein Knöpfchen zu klicken, als irgendwas irgendwohin zu schreiben, naja, brauch ich dieses makro face-smile

Lg
Mitglied: h1e15
h1e15 18.05.2009 um 08:30:25 Uhr
Goto Top
Alles klar....bin selber Systemverwalter und mir sind DAUs wohl bekannt ;)
Leider kenn ich mich mit Makros nicht so gut aus das ich hier weiterhelfen könnte. Sorry. ^^
Mitglied: IT-Muscle
IT-Muscle 18.05.2009 um 13:51:14 Uhr
Goto Top
Hallo Stefan,

möglicherweise ist der Lösungansatz von --h1e-- aber gar nicht so schlecht! Folgenden Vorschlag habe ich für Dich, da ich schon öfters mit Makros innerhalb von Word, Excel, usw. gearbeitet habe!..

Mit ALT + F8 kannst du unter Microsoft Excel "Makros aufzeichnen". Das bedeutet, jegliche Akiton, die du ausführst wird im Hintergrund durch den Makro "Aufzeichner" aufgenommen und in einem Makro gespeichert! Nun zu deinem "Problem"

Lass doch von dem Makro die Spalte makieren, kopieren und in einem neuen Datenblatt einfügen, welches widerrum dann unter einer *.txt abgespeichert wird! Ist vielleicht auf den ersten Blick etwas umständlich, aber nacher bedeutet es nur noch einen dumpfen Klick und die Sache ist geritzt face-smile ... Darüber hinaus kannst du dann das Makro danach über die Konsole noch nach Belieben anpassen!..

Probier das doch einfach mal?!.. Solltest du irgendwie Hilfe brauchen dabei sag mir einfach bescheid=)

Mfg,
Michael
Mitglied: bastla
bastla 18.05.2009 um 15:38:57 Uhr
Goto Top
Hallo Stefan!

Wenn's aber doch ein Stück VBA sein soll, dann etwa so (erstellt unter Excel 2003):
Sub ExportiereSpalte()
Const Spalte As String = "T"  
Const AbZeile As Integer = 3
Datei = "D:\Export.txt"  

Open Datei For Output As 1
Zeile = AbZeile
Do While Cells(Zeile, Spalte) <> ""  
    Print #1, Cells(Zeile, Spalte)
    Zeile = Zeile + 1
Loop
Close 1
MsgBox "Die Spalte """ & Spalte & """ wurde in die Datei " & vbCrLf & """" & Datei & """ exportiert."  
End Sub
Es werden alle Zellinhalte aus der vorgegebenen "Spalte" (beginnend in Zeile "AbZeile") in die angegebenen "Datei" geschrieben, bis die erste leere Zelle erreicht wird.

In dieser "Minimalvariante" erfolgt keine Überprüfung auf Schreibrechte bzw auf das Vorhandensein einer gleichnamigen Zieldatei (welche kommentarlos überschrieben würde).

Grüße
bastla
Mitglied: van-delle
van-delle 21.05.2009 um 01:42:55 Uhr
Goto Top
und mit :

Dim DatNam As String
Dim NeuDatNam As String

DatNam = "c:\dateiname.txt"
NeuDatNam = Mid(DatNam, 1, InStrRev(DatNam, ".") - 1) & _
Format(Date, "yyyymm") & Mid(DatNam, InStrRev(DatNam, "."))
Name DatNam As NeuDatNam

Kann man noch das Datum anhängen.

Quelle: http://www.office-loesung.de/ftopic63624_0_0_asc.php
Mitglied: Yosimo
Yosimo 13.04.2011 um 15:57:25 Uhr
Goto Top
Hallo,

ich habe das Script - Dank an bastla - für mich ein wenig abgeändert, damit die Textdatei immer in das Verzeichnis geschrieben wird, in dem auch die Exceldatei liegt, aus der es ausgeführt wird.
Das Makro funktioniert so in Excel 2003 einwandfrei.


Sub ExportiereSpalte()
Const Spalte As String = "E"  
Const AbZeile As Integer = 1
Datei = "Export.txt"  
Open ActiveWorkbook.Path & "\" & Datei For Output As 1  
Zeile = AbZeile
Do While Cells(Zeile, Spalte) <> ""  
    Print #1, Cells(Zeile, Spalte)
    Zeile = Zeile + 1
Loop
Close 1
MsgBox "Die Spalte """ & Spalte & """ wurde in die Datei " & vbCrLf & """" & Datei & """ exportiert."  
End Sub


In Excel 2007 läuft es jedoch nicht. Fehlermeldung ist: Fehler beim Kompilieren: Syntaxfehler (in der Zeile: Print #1, Cells(Zeile, Spalte)
Wie muss ich es denn anpassen, damit es auch unter Excel 2007 funktioniert? (ich führe es dort als Add-In aus, damit ich ich es immer in allen Excel-Dateien zur Verfügung habe).

MfG
Yosimo
Mitglied: bastla
bastla 13.04.2011 um 17:49:16 Uhr
Goto Top
Hallo Yosimo!

Du kannst auf die Verwendung des "FileSystemObjects" umstellen:
Sub ExportiereSpalte()
Const Spalte As String = "E"  
Const AbZeile As Integer = 1
Datei = "Export.txt"  
Set fso = CreateObject("Scripting.FileSystemObject")  
Set DateiAus = fso.CreateTextFile(ActiveWorkbook.Path & "\" & Datei)  
Zeile = AbZeile
Do While Cells(Zeile, Spalte) <> ""  
    DateiAus.WriteLine Cells(Zeile, Spalte)
    Zeile = Zeile + 1
Loop
DateiAus.Close
MsgBox "Die Spalte """ & Spalte & """ wurde in die Datei " & vbCrLf & """" & Datei & """ exportiert."  
End Sub
Grüße
bastla
Mitglied: Yosimo
Yosimo 14.04.2011 um 12:31:48 Uhr
Goto Top
Hallo bastla,

funktioniert jetzt in Excel 2007 bestens,
vielen Dank!

Grüße
Yosimo
Mitglied: Yosimo
Yosimo 31.05.2011 um 13:09:43 Uhr
Goto Top
Hallo,

ich habe die MsgBox-Zeile dahin abgeändert, dass Sie mir auch die Anzahl der erstellten TXT-Dateien meldet:

Sub ExportiereSpalte(control As IRibbonControl)
Ziel = ActiveWorkbook.Path & "\"  
Stellen = 5
Typ = ".txt"  
AbZeile = 2
Spalte = "A"  

Zeile = AbZeile
Nr = 1000001

Set fso = CreateObject("Scripting.FileSystemObject")  
If Right(Ziel, 1) <> "\" Then Ziel = Ziel & "\"  

Do While Cells(Zeile, Spalte).Value <> ""  
    fso.CreateTextFile(Ziel & Right(Nr, Stellen) & Typ).Write Cells(Zeile, Spalte).Value
    Zeile = Zeile + 1
    Nr = Nr + 1
Loop
MsgBox "Fertig!" & vbCrLf & "Aus Spalte """ & Spalte & """ wurden  """ & Zeile & """  TXT-Dateien erzeugt."  
End Sub

Allerdings werden immer 2 zuviel gemeldet. Und wenn die Spalte, aus der die TXT-Dateien geschrieben werden, leer ist, werden zwar keine TXT-Dateien erzeugt, aber die MsgBox meldet 2.
Ich lasse immer ab der 2. Zeile rausschreiben.

Wie muss ich denn den Code ändern, damit die richtige Anzahl gemeldet wird?
(Excel2007 unter Win7)

Grüße
Yosimo
Mitglied: bastla
bastla 31.05.2011 um 15:39:08 Uhr
Goto Top
Hallo Yosimo!

Wenn immer 2 zuviel angezeigt wird, würde sich anbieten, 2 abzuziehen ... face-wink

... da der Grund aber die Vorgabe durch "AbZeile" (siehe Zeilen 5 und 8) ist, solltest Du besser "Zeile - AbZeile" rechnen.

Grüße
bastla
Mitglied: Yosimo
Yosimo 31.05.2011 um 16:06:13 Uhr
Goto Top
Hallo Bastla,

ja wirklich simpel, schande über mich.
Wahrscheinlich bin ich nicht drauf gekommen, weil ich zu viel über die Ursache gegrübelt habe:
wenn ich ein 10-zeiliges Exceldokument habe, dann erhalte ich ohne der ersten Zeile 9 Dokumente. Nach meiner Logik also immer ein Dokument weniger als Excel Zeilen hat. Warum die MsgBox dann eine Differenz von 2 statt 1 ausgibt, will sich mir da nicht erschließen.

Aber egal, wenn ich es mit Deinem Tipp lösen kann, ist es für mich völlig ausreichend.

Vielen Dank!

Grüße
Yosimo
Mitglied: bastla
bastla 31.05.2011 um 16:19:34 Uhr
Goto Top
Hallo Yosimo!
wenn ich ein 10-zeiliges Exceldokument habe

Warum die MsgBox dann eine Differenz von 2 statt 1 ausgibt, will sich mir da nicht erschließen.
Es wird ja immer schon eine Zeile weitergezählt - daher sind in der Anzahl enthalten die (übersprungene) Zeile 1 und die aktuelle (leere, zumindest in Spalte A) Zeile 11 ...

Grüße
bastla
Mitglied: Yosimo
Yosimo 01.06.2011 um 09:03:56 Uhr
Goto Top
ok, ist jetzt klar. Ich bin nicht davon ausgegangen, dass die übersprungenen Zeilen auch mitgezählt werden.

Danke und Gruß
Yosimo
Mitglied: Yosimo
Yosimo 06.06.2011 um 09:04:46 Uhr
Goto Top
Hallo,

so jetzt bin ich in der Zwischenzeit wieder etwas weiter gekommen und habe noch eine Abfragebox zur exportierenden Spalte eingebaut.

Sub ExportiereSpalte(control As IRibbonControl)
Ziel = ActiveWorkbook.Path & "\"  
Stellen = 5
Typ = ".txt"  
AbZeile = 2

On Error GoTo Fehler

Spalte = InputBox _
("Welche Spalte soll exportiert werden?")  
If IsEmpty(Spalte) Then
    MsgBox "Nichts eingegeben ..."  
        Exit Sub
End If

Zeile = AbZeile
Nr = 1000001

Set fso = CreateObject("Scripting.FileSystemObject")  
If Right(Ziel, 1) <> "\" Then Ziel = Ziel & "\"  

Do While Cells(Zeile, Spalte).Value <> ""  
    fso.CreateTextFile(Ziel & Right(Nr, Stellen) & Typ).Write Cells(Zeile, Spalte).Value
    Zeile = Zeile + 1
    Nr = Nr + 1
Loop
MsgBox "Fertig!" & vbCrLf & "" & vbCrLf & "Aus Spalte """ & Spalte & """ wurden  """ & Zeile - AbZeile & """  TXT-Dateien erzeugt."  
Exit Sub

Fehler:
    MsgBox "Hallo!! - Fehler!!" & vbCrLf & "" & vbCrLf & "Wohl keinen Spaltentitel eingegeben?"  

End Sub

An meiner nächsten Ergänzung scheitere ich aber leider schon wieder an meinen geringen VBA-Kenntnissen.
Hauptaufgabe meines Makros ist es ja, den Inhalt einer Spalte zeilenweise in Textdateien zu exportieren.
Nun möchte ich das Script gerne noch dahingehend erweitern, dass die erzeugten Dateinamen zusätzlich in eine leere Spalte ins Excelblatt zurückgeschrieben werden. Der Spaltentitel sollte auch gleich mit eingesetzt werden.
Dabei soll berücksichtigt sein, dass, wenn ab Zeile 2 exportiert wurde, auch erst ab Zeile 2 wieder die Dateinamen zurückgeschrieben werden. Es soll also der entsprechende Dateiname in seinem zugehörigen Datensatz platziert werden.

Bin dankbar, wenn mir wieder geholfen wird.

Gruß
Yosimo
Mitglied: bastla
bastla 06.06.2011 um 12:08:00 Uhr
Goto Top
Hallo Yosimo!

Vielleicht solltst Du Dir schön langsam (da aus dem "hrausschreiben" ein "Hin und Her" zu werden scheint) einen eigenen Thread leisten - kostet ja nix ... face-wink

Grüße
bastla
Mitglied: Yosimo
Yosimo 06.06.2011, aktualisiert am 18.10.2012 um 18:47:08 Uhr
Goto Top
Hallo bastla,

das mit dem eigenen Thread habe ich beherzigt:

Spalte zeilenweise als Dateien rausschreiben und Dateinamen nach Excel zurückschreiben

Es tut mir leid, wenn es wegen meinen Anfragen wie ein "Hin und Her" erscheint. Aber jeder Schritt ist für mich ein wichtiger Baustein, und kein Tipp aus dem Forum war bisher vergeudet.

Ich bastle an einer Automatisierung für die Erstellung personalisierter Barcodes. Es gibt zwei Textbausteine mit PostScript-Code, die per Batch um die aus Excel exportierten Textdateien, den Barcodenummern, ergänzt und als EPS-Grafiken abgelegt werden.
Die Dateinamen dieser EPS-Dateien sollen dann in die Exceldatei zurückgeschrieben werden. Eine Personalisierungssoftware, die die Exceldatei ausliest, platziert die EPS-Grafiken und weitere Personalisierungsdaten in ein Layoutprogramm, aus dem die Auflage auf einer Digitaldruckmaschine produziert wird.
Die ganze PostScript-Programmierung steht bereits und der Workflow im ganzen läuft auch schon gut. Aber das Handling in Excel möchte ich noch verbessern.

Deine Tipps, bastla, haben mir bisher am meißten weitergeholfen. Deshalb hier mein besonderer Dank an Dich!

Gruß
Yosimo
Mitglied: bastla
bastla 06.06.2011 um 20:40:23 Uhr
Goto Top
Hallo Yosimo!

Das mit dem "Hin und Her" war nicht böse gemeint - ich hatte Deinen Wunsch als "Export und Re-Import" interpretiert ...

Grüße
bastla