Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Bearbeiten vor dem Export

Betrifft: Bearbeiten vor dem Export von: Roger
Geschrieben am: 08.05.2007 20:27:57

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

  

Betrifft: AW: Bearbeiten vor dem Export von: Matthias G
Geschrieben am: 08.05.2007 21:50:35

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


  

Betrifft: nach dem EXportieren natürlich - o.T. von: Matthias G
Geschrieben am: 08.05.2007 21:51:15

:-)


  

Betrifft: vor dem Export von: Roger
Geschrieben am: 08.05.2007 22:28:14

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


  

Betrifft: AW: vor dem Export von: Matthias G
Geschrieben am: 08.05.2007 22:51:47

Hallo Roger,

statt der Zeile


Print #1, s


einfach die:


Print #1, "3;" & s


verwenden.

Gruß Matthias


  

Betrifft: Noch etwas vor dem Export von: Roger
Geschrieben am: 09.05.2007 06:12:28

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


  

Betrifft: AW: Noch etwas vor dem Export von: Erich G.
Geschrieben am: 09.05.2007 08:12:05

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


  

Betrifft: Nicht ganz von: Roger
Geschrieben am: 09.05.2007 19:24:00

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


  

Betrifft: Nicht ganz von: Roger
Geschrieben am: 09.05.2007 19:51:37

Meine Kenntisse reichen glaube ich nicht ganz aus um eine Lösung zu finden.


  

Betrifft: AW: Frage unklar von: Erich G.
Geschrieben am: 09.05.2007 20:13:42

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


  

Betrifft: Ich staune...! von: Roger
Geschrieben am: 09.05.2007 20:36:43

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!


  

Betrifft: AW: Ich staune...! von: Erich G.
Geschrieben am: 10.05.2007 00:51:29

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


  

Betrifft: Neu formuliert von: Roger
Geschrieben am: 10.05.2007 03:37:34

Hallo Erich,



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


  

Betrifft: AW: Neu formuliert von: Erich G.
Geschrieben am: 10.05.2007 06:34:20

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


  

Betrifft: Besten Dank !! von: Roger
Geschrieben am: 10.05.2007 19:01:56

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


  

Betrifft: Danke für Rückmeldung - freut mich! (oT) von: Erich G.
Geschrieben am: 10.05.2007 19:24:47




  

Betrifft: Doch noch etwas... von: Roger
Geschrieben am: 11.05.2007 22:55:40

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.


  

Betrifft: AW: Doch noch etwas... von: Erich G.
Geschrieben am: 12.05.2007 10:48:44

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!


 

Beiträge aus den Excel-Beispielen zum Thema "Bearbeiten vor dem Export"