Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
868to872
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
868to872
868to872
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Bearbeiten vor dem Export

Bearbeiten vor dem Export
08.05.2007 20:27:00
Roger
Hallo Zusammen,
Ich habe eine Frage zum Datenexport von einer Exceltabelle in eine CSV Datei.
Beispiel:
Die Spalte A beinhaltet verschiedene Zahlen.
Die Spalte B, C beinhaltet Texte.
Ist es nun möglich beim Export vorab noch am Anfang eine Spalte einzufügen mit einem Kostanten Wert, ohne das diese in der Tabelle sichtbar ist?
Beispiel:
001 text text
würde in dem exportierten Datei wie folgt aussehen
3;1;text;text
wenn der kostante Wert 3 wäre.
Hat jemand eine Idee dafür?
Besten Dank im voraus
Gruss Roger

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bearbeiten vor dem Export
08.05.2007 21:50:00
Matthias
Hallo Roger,
du kannst die Spalte nach dem Importieren einfügen mit diesem Makro:

Sub test()
Const fn1 = "D:\Mappe1.csv"
Const fn2 = "D:\temp.csv"
Dim f1 As Integer, f2 As Integer
Dim z As String
f1 = FreeFile
Open fn1 For Input As f1
f2 = FreeFile
Open fn2 For Output As f2
Do While Not EOF(f1)
Line Input #f1, z
Print #f2, "3;" & z 'Spalte mit 3 einfügen
Loop
Close f1
Close f2
Kill fn1 'Originaldatei löschen
Name fn2 As fn1 'temp. Datei umbenennen
End Sub


Gruß Matthias

nach dem EXportieren natürlich - o.T.
08.05.2007 21:51:00
Matthias
:-)

vor dem Export
08.05.2007 22:28:00
Roger
Hallo Matthias,
danke für Deine Antwort. Ist es auch möglich vor dem Export bearbeitungen vorzunehmen?
Hier einmal der verwendete Code!

Sub CSV_Export()
Dim Bereich As Range
Dim Zeile As Range
Dim Zelle As Range
Dim s As String
Dim Verzeichnis  As String
Dim Datei        As String
Verzeichnis = ActiveWorkbook.Path & "\"
Datei = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & ".csv"
Set Bereich = Tabelle1.Range("A1:C50")
Open Verzeichnis & Datei For Output As #1
Print #1, "/TABLE;89"
For Each Zeile In Bereich.Rows
If Zeile.Cells(2)  "" And Zeile.Cells(3)  "" Then
For Each Zelle In Zeile.Cells
s = s & Zelle.Text & ";"
Next Zelle
s = Left(s, Len(s) - 1)
Print #1, s
End If
s = ""
Next Zeile
Close #1
MsgBox "Die Datei wurde erfolgreich exportiert." & Chr(13) & _
"Sie befindet sich unter:" & Chr(13) & Chr(13) & _
Verzeichnis & Datei, vbOKOnly, "CSV Export"
End Sub


Kann ich jetzt nicht vor dem Export am Anfang der Tabelle eine neue Spalte einfügen in der ich den Wert aus einer Inputbox einfülle?
Alternativ könnte ich ja die Tabelle kopieren in ein neues Blatt einfügen, neue Spalte einfügen, exportieren und hilfsblatt wieder löschen.
Was meinst Du dazu?
Gruss Roger

Anzeige
AW: vor dem Export
08.05.2007 22:51:00
Matthias
Hallo Roger,
statt der Zeile

Print #1, s


einfach die:


Print #1, "3;" & s


verwenden.
Gruß Matthias

Noch etwas vor dem Export
09.05.2007 06:12:00
Roger
Hallo Matthias,
manchmal wäre es so einfach ;O). Danke für Deine Hilfe, denn jetzt klappt es wunderbar.
Habe aber noch eine weitere Frage.
Kann ich den Zahlenwert in der Spalte A bevor ich exportiere um 1 erhöhen?
Wenn Du auch noch auf Diese Frage eine Antwort hast, ist mein Problem komplett gelöst.
Gruss Roger

Anzeige
AW: Noch etwas vor dem Export
09.05.2007 08:12:05
Erich
Hallo Roger,
probier mal

Option Explicit
Sub CSV_Export()
Dim Bereich As Range
Dim Zeile As Range
Dim Zelle As Range
Dim strZ As String
Dim Verzeichnis  As String
Dim Datei        As String
Dim lngNr As Long
lngNr = 3 ' Startnummer
Verzeichnis = ActiveWorkbook.Path & "\"
Datei = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & ".csv"
Set Bereich = Tabelle1.Range("A1:C50")
Open Verzeichnis & Datei For Output As #1
Print #1, "/TABLE;89"
For Each Zeile In Bereich.Rows
If Zeile.Cells(2)  "" And Zeile.Cells(3)  "" Then
For Each Zelle In Zeile.Cells
strZ = strZ & Zelle.Text & ";"
Next Zelle
strZ = Left(strZ, Len(strZ) - 1)
Print #1, lngNr & strZ
lngNr = lngNr + 1
End If
strZ = ""
Next Zeile
Close #1
MsgBox "Die Datei wurde erfolgreich exportiert." & Chr(13) & _
"Sie befindet sich unter:" & Chr(13) & Chr(13) & _
Verzeichnis & Datei, vbOKOnly, "CSV Export"
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
Nicht ganz
09.05.2007 19:24:00
Roger
Hallo Erich,
danke für Deine anpassungen. Ich habe es nun ausprobiert und festgestellt das es nicht ganz so funktioniert wie es sollte.
Die erste Zeile in der Spalte A fängt in der Exportdatei mit 3 an. Da ja nur die Zeilen exportiert werden die in der Spalten B und C einen Eintrag aufweisen gibt es noch ein weiteres Problem.
Sind nämlich die nächten 2 Zeilen leer und erst die 4. wieder gefüllt müsste in der Exportdatei eine 5 stehen. Momentan steht aber eine 2.
Zudem fügt es die Zahl einfach zu der Ziffer in der Spalte A hinzu und addiert nicht.
Kannst Du nachvollziehen was ich meine?
Vielleicht hast Du ja auch noch eine Idee für dieses Problem.
Ich versuche es auch einmal.
Gruss Roger

Anzeige
Nicht ganz
09.05.2007 19:51:37
Roger
Meine Kenntisse reichen glaube ich nicht ganz aus um eine Lösung zu finden.

AW: Frage unklar
09.05.2007 20:13:42
Erich
Hallo Roger,
soll aus der Beispieltabelle
 ABC
1100 aaa
2200bbbcc
3300deeeeee
4400ffff 
5500ggggggggghhhh
6600  

das werden?
/TABLE;89
2;201;bbb;cc
3;301;d;eeeeee
5;501;ggggggggg;hhhh
Dann wäre die 1. Zahl jeder CSV-Zeile einfach die Zeilennummer in der Quelltabelle,
die Zahl in Spalte A wird um eine Konstante (hier 1) erhöht.
(Für den Fall, dass die 1. Zahl jeder CSV-Zeile NICHT die Quell-Zeilennummer sein soll,
habe ich die Variable lngNr noch dringelassen.)
Das geht damit:

Option Explicit
Sub CSV_Export()
Dim Bereich As Range
Dim Zeile As Range
Dim Zelle As Range
Dim strZ As String
Dim Verzeichnis  As String
Dim Datei        As String
Dim lngNr As Long, intAdd As Integer
lngNr = 1   ' Startnummer                             BITTE FESTLEGEN
intAdd = 1  ' zum Wert in Spalte A zu addierende Zahl BITTE FESTLEGEN
Verzeichnis = ActiveWorkbook.Path & "\"
Datei = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & ".csv"
Set Bereich = Tabelle1.Range("A1:C50")
Open Verzeichnis & Datei For Output As #1
Print #1, "/TABLE;89"
For Each Zeile In Bereich.Rows
If Zeile.Cells(2)  "" And Zeile.Cells(3)  "" Then
For Each Zelle In Zeile.Cells
If Zelle.Column = 1 Then
strZ = strZ & (Zelle.Text + intAdd) & ";"
Else
strZ = strZ & Zelle.Text & ";"
End If
Next Zelle
strZ = Left(strZ, Len(strZ) - 1)
Print #1, lngNr & ";" & strZ
End If
lngNr = lngNr + 1
strZ = ""
Next Zeile
Close #1
MsgBox "Die Datei wurde erfolgreich exportiert." & Chr(13) & _
"Sie befindet sich unter:" & Chr(13) & Chr(13) & _
Verzeichnis & Datei, vbOKOnly, "CSV Export"
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
Ich staune...!
09.05.2007 20:36:43
Roger
Hallo Erich,
ich komme aus dem staunen nicht mehr heraus. Tolle Sache! Es ist zu 99% genau das was ich mir vorgestellt habe!
Ich brauche aber aus Deinem PrintScreen nur Spallte A, B und C.
Die Quell-Zeilennummer aus Excel brauche ich nicht.
Wenn Ich nun Deinen Code anwende, steht folgendes in dem Exportfile:
A, A+1, B, C
Es ist aber so das ich nur das modifizierte A also
A+1, B, C brauche.
Hast du noch eine Lösung für das 1% ;O)
Das wäre spitze!

AW: Ich staune...!
10.05.2007 00:51:29
Erich
Hallo Roger,
aus deiner Beschreibung kann ich nicht erkennen, was du jetzt haben möchtest
(als Ergebnis aus meiner Beispieltabelle):
a)
/TABLE;89
201;bbb;cc
301;d;eeeeee
501;ggggggggg;hhhh
b)
/TABLE;89
202;bbb;cc
303;d;eeeeee
505;ggggggggg;hhhh
Bei a) wird die alte Spalte A um einen festen Wert (hier 1) erhöht,
bei b) wird um eine sich von Zeile zu Zeile ändernde, laufende Nummer erhöht.
Soll a) oder b) rauskommen?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
Neu formuliert
10.05.2007 03:37:34
Roger
Hallo Erich,
Userbild
Daraus muss folendes exportiert werden:
1;AA;FD
2;ZR;DF
9;TT;QW
Erläuterung:
Der 1. Wert die Zahl aus Spalte A mit 1 addiert.
Der 2. Wert der Wert aus Spalte B
Der 3. Wert der Wert aus Spalte C
Momentan wird folgendes exportiert:
0;1;AA;FD
1;2;ZR;DF
8;9;TT;QW
Erläuterung:
Der 1. Wert die unveränderte Zahl aus Spalte A ist.
Der 2. Wert die Zahl aus Spalte A mit 1 addiert.
Der 3. Wert der Wert aus Spalte B
Der 4. Wert der Wert aus Spalte C
Ich hoffe Du kannst jetzt nachvollziehen was ich meine ;O)
Sorry das ich mich nicht klar ausgedrückt habe.
Aus Deinem Beispiel wäre es die Variante A
Gruss Roger

Anzeige
AW: Neu formuliert
10.05.2007 06:34:00
Erich
Hallo Roger,
da kann man dann einfach alles weglassen, was mit lngNr zu tun hat:

Option Explicit
Sub CSV_Export()
Dim Bereich As Range
Dim Zeile As Range
Dim Zelle As Range
Dim strZ As String
Dim Verzeichnis  As String
Dim Datei        As String
Dim intAdd As Integer
intAdd = 1  ' zum Wert in Spalte A zu addierende Zahl - BITTE FESTLEGEN
Verzeichnis = ActiveWorkbook.Path & "\"
Datei = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & ".csv"
Set Bereich = Tabelle1.Range("A1:C50")
Open Verzeichnis & Datei For Output As #1
Print #1, "/TABLE;89"
For Each Zeile In Bereich.Rows
If Zeile.Cells(2)  "" And Zeile.Cells(3)  "" Then
For Each Zelle In Zeile.Cells
If Zelle.Column = 1 Then
strZ = strZ & (Zelle.Text + intAdd) & ";"
Else
strZ = strZ & Zelle.Text & ";"
End If
Next Zelle
strZ = Left(strZ, Len(strZ) - 1)
Print #1, strZ
End If
strZ = ""
Next Zeile
Close #1
MsgBox "Die Datei wurde erfolgreich exportiert." & Chr(13) & _
"Sie befindet sich unter:" & Chr(13) & Chr(13) & _
Verzeichnis & Datei, vbOKOnly, "CSV Export"
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
Besten Dank !!
10.05.2007 19:01:00
Roger
Hallo Erich,
ich möchte mich recht herzlich bei Dir bedanken.
Der Code funktioniert jetzt 100% und ist genau das was ich gesucht habe.
Gruss Roger

Danke für Rückmeldung - freut mich! (oT)
10.05.2007 19:24:47
Erich

Doch noch etwas...
11.05.2007 22:55:00
Roger
Hallo Erich,
habe nochmals eine kleine Frage wenn ich darf.
Der Code fragt den Bereich A1:C50 ab und achtet darauf das nur Daten exportiert werden, wenn in der Spalte B und C etwas steht.
Das Problem ist jetzt natürlich wenn gar nichts steht erstellt der Code tortzdem eine Datei.
Kann mann das durch eine "Msgbox" verhindern?
"Der Bereich ist leer, kein Export möglich"?
Ich weiss nicht wie ich das realisieren kann.

Anzeige
AW: Doch noch etwas...
12.05.2007 10:48:00
Erich
Hallo Roger,
das ginge so:

Option Explicit
Sub CSV_Export()
Dim Bereich As Range
Dim Zeile As Range
Dim Zelle As Range
Dim strZ As String
Dim Verzeichnis  As String
Dim Datei        As String
Dim intAdd As Integer
Set Bereich = Tabelle1.Range("A1:C50")
If WorksheetFunction.CountA(Bereich.Columns("B:C")) = 0 Then Exit Sub
intAdd = 1  ' zum Wert in Spalte A zu addierende Zahl - BITTE FESTLEGEN
Verzeichnis = ActiveWorkbook.Path & "\"
Datei = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & ".csv"
Open Verzeichnis & Datei For Output As #1
Print #1, "/TABLE;89"
For Each Zeile In Bereich.Rows
If Zeile.Cells(2)  "" And Zeile.Cells(3)  "" Then
For Each Zelle In Zeile.Cells
If Zelle.Column = 1 Then
strZ = strZ & (Zelle.Text + intAdd) & ";"
Else
strZ = strZ & Zelle.Text & ";"
End If
Next Zelle
strZ = Left(strZ, Len(strZ) - 1)
Print #1, strZ
End If
strZ = ""
Next Zeile
Close #1
MsgBox "Die Datei wurde erfolgreich exportiert." & Chr(13) & _
"Sie befindet sich unter:" & Chr(13) & Chr(13) & _
Verzeichnis & Datei, vbOKOnly, "CSV Export"
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort, und: Schönes Wochenende!

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige