Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1872to1876
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

Bei Excel CSV Export Spalten-RF ändern

Bei Excel CSV Export Spalten-RF ändern
12.03.2022 22:28:56
Albert
Hallo liebes Forum!
Gibt es eine Möglichkeit, beim Excel CSV Export im Makro = "ExportCSV_sevDesk_Kontaktdaten" die Spalten-Reihenfolge zu ändern und Semikolons einzufügen?
Das brauche ich, weil die Buchhaltungsoftware sevDesk für den Import der aus Excel exportierten Daten eine fix vorgegebene Spaltenreihenfolge benötigt.
In der hochgeladenen Datei befinden sich im Register "Kunden" die zu exportierenden Daten.
Im Register "Export FeldReihenfolge erzeugen" ist die IST-Exportreihenfolge und die SOLL-Reihenfolge die beim Export erzeugt werden soll, beschrieben.
https://www.herber.de/bbs/user/151738.zip
Die zweite hochgeladene Datei ist ein Beispiel einer mit dem Makro = "ExportCSV_sevDesk_Kontaktdaten" exportierte CSV-Datei.
Der Dateiname der exportierten Datei heißt bei mir "Export_Tel_Daten_2022.03.12 - 22.16.csv".
https://www.herber.de/bbs/user/151739.zip
Falls die Herstellung der Reihenfolge incl Semikolons im Zuge des Datenexportes nicht möglich ist, wie kann man das sonst lösen?
z.B.: Könnte im Makro "ExportCSV_sevDesk_Kontaktdaten" eingebaut werden, das die Exportierte CSV-Datei autom. geöffnet wird und in dieser Datei ein anderes neues Makro gestartet wird und diese Makro erzeugt dann die Reihenfolge incl. Semikolons und danach wird die Datei wieder als CSV mit dem gleichen Namen gespeichert?

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bei Excel CSV Export Spalten-RF ändern
13.03.2022 12:25:23
Yal
Hallo Albert,
(bin am Smartphone und kann deine Dateien nicht sehen)
Eigentlich, wenn Du mit der Makro das aktive Blatt direkt als CSV speicherst, reicht es, wenn Du die Reihenfolge der Spalten vor dem Export änderst. Es lässt sich mit Makrorekorder aufnehmen, dann den Code anpassen.
Eventuell machst Du es auf einer Kopie des Blattes in eine neue Arbeitsmappe, sodass das Original unberuhrt bleibt. Das Kopieren lässt sich auch gut aufnehmen.
VG
Yal
AW: Bei Excel CSV Export Spalten-RF ändern
13.03.2022 20:22:27
Firmus
Hallo Albert,
im Blatt Export FeldReihenfolge erzeugen hast du doch in Zeile 7 die gewünschte Spaltenreihenfolge dokumentiert.
Deine Daten kannst du sehr einfach in die gewünschte Reihenfolge bringen.
1. Kopiere die Zeile 7 (gew. Reihenfolge) als erste Zeile in dein Datenblatt,
2. Sortiere das gesamte Datenblatt mit der Option "Spalten sortieren"
3. Gib die reinkopierte Zeile "1" als "Sortieren nach" (Zeile 1) an.
4. Lösche die eingefügte Zeile 1 wieder raus.
Ergebnis: Deine Daten sind genau in der von dir gewünschten Spaltenreihenfolge.
Falls du die Originaldaten unverändert behalten willst, arbeite beim Sortieren mit einer Kopie.
Gruß,
Firmus
Anzeige
AW: Bei Excel CSV Export Spalten-RF ändern
14.03.2022 10:56:39
Albert
Hallo Yal und Firmus,
danke für die Rückmeldungen!
Ich benötige die Änderung der Spaltenreihenfolge im Prozess des CSV-Export erzeugen. Die Originaldatei darf nicht verändert werden.
Unten habe ich den gesamten CSV-Code eingefügt.
Am Ende nach den Zeichen ****************** habe ich den Code für die Änderung der Spaltenreihenfolge eingefügt.
Nach dem CSV-Export soll die CSV Datei geöffnet und die Spaltenreihenfolge geändert werden, wenn es im Zuge der Erstellung nicht möglich ist.
Problem: Die gespeicherte Datei hat jedesmal einen neuen Namen, weil beim speichern das Datum/Uhrzeit in den Dateinamen geschrieben wird.

Sub ExportCSV_sevDesk_Kontaktdaten()
' ExportCSV_Buchhalung_Kontaktdaten für sevDesk
Dim WS            As Excel.Worksheet
Dim rngColumn     As Excel.Range
Dim rngColumns    As Excel.Range
Dim Cell          As Excel.Range
Dim lColumnStatus As Long
Dim lRow          As Long
Dim lLastRow      As Long
Dim lFirstRow     As Long
Dim fd As FileDialog, rngTest As Range, rng As Range, fltr As FileDialogFilter
Dim i      As Long, line As String
Dim csvContent As String, fso As Object, csvFile As Object
Dim strFilePath As String
'Frage ob Makro ausgeführt werden soll
If MsgBox("Makro ausführen?", vbYesNo, "ExportCSV sevDesk-Kontaktdaten")  vbYes Then Exit Sub
' Blattschutz aufheben u. WS (Worksheet) = aktives Blatt
Sheets("Kunden").Unprotect
Set WS = ActiveSheet
' Speicherpfad und Dateiname incl. Zeitstempel
strFilePath = "C:\Users\Simon\Documents\Privat\Sonstiges\Albert\Kunden CSV-Exportdateien sevDesk\Export_sevDesk_Daten_" & Format(Now, "YYYY.MM.DD - HH.MM") & ".csv"
' Datei löschen wenn bereits vorhanden
If Dir(strFilePath)  "" Then Kill strFilePath
' Neue Datei öffnen
Set fso = CreateObject("Scripting.FileSystemObject")
Set csvFile = fso.OpenTextFile(strFilePath, 2, True)
' Erste Zeile ist Zeile 3
lFirstRow = 3
' letzte belegte Zeile in Spalte A
lLastRow = WS.Cells(WS.Rows.Count, "A").End(xlUp).Row
' Range-Eigenschaft erkennt Namen aus Namensmanager "CSVExportbereich_sevDesk"
lColumnStatus = WS.Range("Status_Kunden").Column
Set rngColumns = WS.Range("CSVExportbereich_sevDesk").Columns
' Exportieren wenn die Spalte Status "*exportieren_BH*" enthält und Zeile 3 für die Überschriften
For lRow = lFirstRow To lLastRow
If WS.Cells(lRow, lColumnStatus).Text Like "*exportieren_BH*" Or lRow = lFirstRow Then
line = ""
' Exportbereich (Iteration durch die betroffenen Exportspalten)
For Each rngColumn In rngColumns
' Hier Variable 'Cell' anstatt 'rng' verwenden für Range mit einzelner Zelle
Set Cell = WS.Cells(lRow, rngColumn.Column)
Debug.Print "Cell.Value = " & Cell.Value
line = line & Cell.Value & ";"
Next
' Exportdatum ab Zeile 4 in Spalte BN schreiben
lColumnExportdatum = WS.Range("CSVExportdatum_sevDesk").Column
If lRow > lFirstRow Then WS.Cells(lRow, lColumnExportdatum) = Date
' Daten für CSV-Inhalt erstellen
csvContent = csvContent & Left(line, Len(line) - 1) & vbNewLine
End If
Next
' In Spalte BN den Wert "exportieren_BH" mit dem Wert "Bereits_exportiert_BH" ersetzen
'        WS.Range("Status_Kunden").Replace What:="exportieren_BH", Replacement:="Bereits_exportiert_BH", LookAt:= _
'        xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
'        ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
'Blattschutz im Register Kunde aktivieren beim Speichern der Datei
'        Sheets("Kunden").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
'                , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
'                AllowFormattingRows:=True, AllowFiltering:=True, UserInterfaceOnly:=True
' Wenn CSV-Datenaufbereitung leer ist, dann MsgBox
If csvContent = "" Then MsgBox "Keine Daten gefunden": Exit Sub
' CSV-Datei erstellen
csvFile.Write (csvContent)
csvFile.Close
' Wenn CSV-Datei erstellt ist, dann MsgBox
If Err = 0 Then MsgBox "Datei erstellt" & vbLf & strFilePath, vbInformation, "CSV - Export"
'Erzeugtes csvFile öffnen und Spaltenreihenfolge herstellen für secDesk Import
'csvFile.Open --> Problem: Die gespeicherte Datei hat jedesmal einen neuen Namen,
'                 weil beim speichern das Datum/Uhrzeit in den Dateinamen geschrieben wird.
Columns("H:H").Select
Selection.Cut
Columns("A:A").Select
Selection.Insert Shift:=xlToRight
Columns("J:J").Select
Selection.Cut
Columns("B:B").Select
Selection.Insert Shift:=xlToRight
Columns("K:K").Select
Selection.Cut
Columns("C:C").Select
Selection.Insert Shift:=xlToRight
Columns("M:M").Select
Selection.Cut
Columns("D:D").Select
Selection.Insert Shift:=xlToRight
Columns("M:M").Select
Selection.Cut
Columns("E:E").Select
Selection.Insert Shift:=xlToRight
Columns("G:G").Select
Selection.Cut
Columns("F:F").Select
Selection.Insert Shift:=xlToRight
Columns("N:N").Select
Selection.Cut
Columns("H:H").Select
Selection.Insert Shift:=xlToRight
Columns("N:N").Select
Selection.Cut
Columns("I:I").Select
Selection.Insert Shift:=xlToRight
Columns("W:Y").Select
Selection.Cut
Columns("J:L").Select
Selection.Insert Shift:=xlToRight
Columns("P:P").Select
Selection.Cut
Columns("M:M").Select
Selection.Insert Shift:=xlToRight
Columns("O:P").Select
Selection.Cut
Columns("M:N").Select
Selection.Insert Shift:=xlToRight
Columns("Q:Q").Select
Selection.Cut
Columns("O:O").Select
Selection.Insert Shift:=xlToRight
Columns("Q:Q").Select
Selection.Cut
Columns("P:P").Select
Selection.Insert Shift:=xlToRight
Columns("Q:Q").Select
Selection.Cut
Columns("M:M").Select
Selection.Insert Shift:=xlToRight
Columns("X:X").Select
Selection.Cut
Columns("R:R").Select
Selection.Insert Shift:=xlToRight
Columns("X:Y").Select
Selection.Cut
Columns("S:T").Select
Selection.Insert Shift:=xlToRight
Columns("Z:Z").Select
Selection.Cut
Columns("U:U").Select
Selection.Insert Shift:=xlToRight
Columns("X:X").Select
Selection.Cut
Columns("V:V").Select
Selection.Insert Shift:=xlToRight
Columns("X:X").Select
Selection.Cut
Columns("W:W").Select
Selection.Insert Shift:=xlToRight
Columns("Z:Z").Select
Selection.Cut
Columns("X:X").Select
Selection.Insert Shift:=xlToRight
Columns("Z:Z").Select
Selection.Cut
Columns("Y:Y").Select
Selection.Insert Shift:=xlToRight
Columns("AA:AA").Select
Selection.Cut
Columns("Z:Z").Select
Selection.Insert Shift:=xlToRight
csvFile.Close
End Sub

Anzeige
AW: Bei Excel CSV Export Spalten-RF ändern
14.03.2022 14:51:28
Yal
Hallo Albert,
wenn Du schon die Zelle einzel liest, um daraus eine Satz zu bauen, dann nehme die richtige Reihenfolge:

Dim ColNr         As Long
' Exportbereich (Iteration durch die betroffenen Exportspalten)
For Each ColNr In Array(8, 10, 11, 13, 12, 2, 1, 14, 9, 99, 99, 99, 6, 4, 5, 7, 3, 21, 20, 22, 99, 17, 16, 19, 18, 99, 15, 99, 99, 99, 99, 99, 99, 99, 99, 99)
' Hier Variable 'Cell' anstatt 'rng' verwenden für Range mit einzelner Zelle
Set Cell = WS.Cells(lRow, ColNr)
Debug.Print "Cell.Value = " & Cell.Value
line = line & Cell.Value & ";"
Next
Ich gehe davon aus, dass die Spalte 99 leer ist. Daher wir z.B. beim 22,99,17 wird:
<Wert in 22>;;<Wert in 17>
VG
Yal
Anzeige
AW: Bei Excel CSV Export Spalten-RF ändern
14.03.2022 20:52:46
Albert
Danke Yal für die Änderung des Codes und der Spalten-Reihenfolge!
Ich bekomme das Makro aber nicht zum laufen, weil eine Fehlermeldung erscheint dessen Lösung ich nicht hinbekomme.
Im Bild unten habe ich die Fehlermeldung eingefügt.
Bitte nochmals um Hilfe.
Danke!
https://www.herber.de/bbs/user/151763.jpg
Userbild
AW: Bei Excel CSV Export Spalten-RF ändern
15.03.2022 08:43:47
Yal
Hallo Albert,
die Lösung ist einfach:
Meldung lesen,
Sich Gedanken machen, was sie bedeuten könnte,
Notfalls googeln.
Sorry, aber es handelt sich hier um eine ziemlich einfache Sache. Ich würde sogar behaupten, wenn du damit nicht zurechtkommst, dann lasse die Finger von VBA, den VBA erfordert ein Minimum an Willen, die Sache zu verstehen.
Sich mit Lösung füttern zu lassen, die man nicht versteht oder nicht beherrscht, ist keine Lösung sondern Gefahr im Verzug.
(Es hört sich sehr frech an, aber ich meine es eigentlich gut.)
VG
Yal
Anzeige
AW: Bei Excel CSV Export Spalten-RF ändern
15.03.2022 09:34:03
Albert
Hallo Yal,
danke für die Rückmeldung!
Ich verstehe auch gut, was du mit deiner Rückmeldung meinst.
Ich habe den Willen und bemühe mich auch das ganze zu verstehen, aber es ist halt learning by doing.
Da ich aber erst am Anfang der Verwendung von VBA stehe (ausser mit Aufzeichnen), bin ich am lernen und ich recherchiere auch viel, aber manches was ich da lese verstehe ich einfach noch nicht.
Deshalb bitte ich dich mir noch zu helfen, damit ich mit deiner Hilfe das Makro zum Laufen bringe.
Danke!
Zur Fehlermeldung:
Ich habe nach mehreren Recherchen und probieren die Lösung nun gefunden. Das Makro läuft und exportiert Daten.
Nur werden jetzt die Daten für den Export nicht lt. der vom Namensmanager def. Spalten "Set rngColumns = WS.Range("CSVExportbereich_sevDesk").Columns" genommen und in Reihenfolge gebracht, sondern es werden die Spalten und deren Speltenreihenfolge aus der Gesamttabelle genommen.

' Range-Eigenschaft erkennt Namen aus Namensmanager "CSVExportbereich_sevDesk"
lColumnStatus = WS.Range("Status_Kunden").Column
Set rngColumns = WS.Range("CSVExportbereich_sevDesk").Columns
' Exportieren wenn die Spalte Status "*exportieren_BH*" enthält und Zeile 3 für die Überschriften
For lRow = lFirstRow To lLastRow
If WS.Cells(lRow, lColumnStatus).Text Like "*exportieren_BH*" Or lRow = lFirstRow Then
line = ""
' Exportbereich (Iteration durch die betroffenen Exportspalten)
'            For Each rngColumn In rngColumns
'                ' Hier Variable 'Cell' anstatt 'rng' verwenden für Range mit einzelner Zelle
'                Set Cell = WS.Cells(lRow, rngColumn.Column)
'                Debug.Print "Cell.Value = " & Cell.Value
'                line = line & Cell.Value & ";"
'           Next
' Exportbereich (Iteration durch die betroffenen Exportspalten)
For Each ColNr In Array(8, 10, 11, 13, 12, 2, 1, 14, 9, 99, 99, 99, 6, 4, 5, 7, 3, 21, 20, 22, 99, 17, 16, 19, 18, 99, 15, 99, 99, 99, 99, 99, 99, 99, 99, 99)
' Hier Variable 'Cell' anstatt 'rng' verwenden für Range mit einzelner Zelle
Set Cell = WS.Cells(lRow, ColNr)
Debug.Print "Cell.Value = " & Cell.Value
line = line & Cell.Value & ";"
Next

Anzeige
AW: Bei Excel CSV Export Spalten-RF ändern
15.03.2022 13:03:48
Yal
Hallo Albert,
sehr gut, der Erfolg ist Dir zuzuschreiben.
In dem Fall ging es darum, dass die "Lauf-Variable", also die Variable, die beim jedem Durchlauf der For-Schleife anders gesetzt wird, nicht ein "Long" sein darf, sondern Variant oder Objekt. Also
Dim ColNr As Variant
Da Variablen, die untypisiert sind, immer Variant sind, könnte man auch kurz schreiben
Dim ColNr
Nun zu deiner letzte Frage (ich muss gestehen, ich suche die Frage noch. Es ist nicht eindeutig, was ist, was nicht ssein soll, und was dafür sein sollte).
Was ich aber vertehe: Es gibt einen benannten Bereich, wo die Reihenfolge der zu exportierende Spalten definiert ist, und es ist gewünscht, dass die Reihenfolge dort gelesen wird, anstatt eine feste Reihenfolge wie "Array(8, 10, 11, ..."
Ich weiss nicht, ehrlich gesagt, ob es gut ist, so viele Komplikation zu unterstützen. Wenn Du schon "am Anfang" mit der Programmierung stehst, dann solltest Du einen Code verwenden, den Du nachvollziehen kannst. u.a.: es gibt 2 benannten Bereiche, die "CSVExportbereich_sevDesk" heissen...
Folgendes könnte man leichter nachvollziehen (wobei am Ende doch viel mehr als was ich zuerst dachte).
(Achte darauf, dass Du eine Anbindung der Biliothek "Microsoft Scripting Runtime" braucht! "Extras", "Verweise...", Haken beim "Microsof ..")

Sub ExportCSV_sevDesk_Kontaktdaten()
'mit Anbindung ("Extras", "Verweise...") an "Microsoft Scripting Runtime"
Dim fso As FileSystemObject
Dim csvFile As TextStream
Dim Dateiname As String
Dim Ws As Worksheet
Dim Line As String
Dim R As Long 'R für Row, also Zeile. Lauf-Variablen sollen "Kurz" sein"
Dim ColNr
Dim Zähler As Long
'Const cPfad = "C:\Users\Simon\Documents\Privat\Sonstiges\Albert\Kunden CSV-Exportdateien sevDesk\"
Const cPfad = "C:\temp\H_for\"
Const cDateiRumpf = "Export_Tel_Daten_xxxx.csv"
Const cSpaltenListe = "8,10,11,13,12,2,1,14,9,99,99,99,6,4,5,7,3,21,20,22,99,17,16,19,18,99,15,99,99,99,99,99,99,99,99,99"
Set fso = New FileSystemObject
Dateiname = cPfad & Replace(cDateiRumpf, "xxxx", Format(Now, "YYYY.MM.DD - HH.MM"))
If MsgBox("Daten werden in " & vbCr & Dateiname & vbCr & "exportiert." & vbCr _
& "(ev. vorhandene Datei wird überschrieben)", vbYesNo, "ExportCSV sevDesk-Kontaktdaten")  vbYes Then Exit Sub
Set csvFile = fso.OpenTextFile(Dateiname, ForWriting, True)
Set Ws = Worksheets("Kunden")
Ws.Unprotect
'Überschrift (Zeile 3) exportieren
For Each ColNr In Split(cSpaltenListe, ",")
Line = Line & ";" & Ws.Cells(3, CLng(ColNr)).Value
Next
csvFile.WriteLine Mid(Line, 2) 'der erste Zeichen (";") nehmen wir nicht mit.
'Andere Zeilen (ab Zeile 5) exportieren
For R = 5 To Ws.Range("A99999").End(xlUp).Row
If Ws.Cells(R, Ws.Range("Status_Kunden").Column) Like "*exportieren_BH*" Then
Line = ""
For Each ColNr In Split(cSpaltenListe, ",")
Line = Line & ";" & Ws.Cells(R, CLng(ColNr))
Next
csvFile.WriteLine Mid(Line, 2) 'der erste Zeichen (";") nehmen wir nicht mit.
Zähler = Zähler + 1
Ws.Cells(R, "BN") = Date 'Exportdatum in Spalte "BN" schreiben
End If
Next
csvFile.Close
MsgBox "Es wurden " & Zähler & " Zeilen in " & vbCr & Dateiname & vbCr & "geschrieben."
End Sub

Füge eine neue Zeile 5 in dem die Werte 1 in A, 2 in B, ... So siehst Du schnell, welche Spalte an welche Stelle exportiert wurde.
Mit Rechtsklick auf einem Modul kannst Du übrigens einen Modul entfernen, den Du nicht mehr brauchst.
VG
Yal
Anzeige
AW: Bei Excel CSV Export Spalten-RF ändern
15.03.2022 18:20:46
Albert
Hallo Yal,
danke das du schon so viel Zeit in mein Projekt gesteckt hast.
Ich habe deinen neuen Code eingefügt und das Häckchen bei "Microsoft Scripting Runtime" gemacht und die Daten exportiert.
Die Daten werden exportiert.
Du schribst: u.a.: es gibt 2 benannten Bereiche, die "CSVExportbereich_sevDesk" heissen...
In meinem VBA-Ursprungscode und im Namensmanager gibt es aber keine 2 benannten Bereiche die gleich heissen.
Oder was hast du damit gemeint und ich kapiere es nicht?
Aber bitte nochmals zu meinem Anliegen und das kann ich mit meinem VBA können einfach noch nicht lösen:
In deinem neuen Code werden die Daten aus der Ursprungsdatei genommen und in Reihenfolge gebracht.
Wenn es irgendwie eine Lösung dafür gibt, dann sollen die Daten der Felder lt. Namensmanager "CSVExportbereich_sevDesk" in eine temporäre Datei exportiert werden und von dieser temporären Datei dann in Reihenfolge gebracht werden und dann in die endgültige CSV-Datei exportiert werden.
Da ich mir nicht sicher bin, ob ich mein Anliegen so beschreiben kann, das es zu keiner Fehlinterpretation kommen kann, habe ich zusätzlich das unten eingefügte Bild aktualisiert und die Beschreibung dort auch ergänzt.
Erklärung warum die Daten über den Namensmanager kommen sollen:
Weil es im laufe der Zeit erforderlich sein wird, daß neue Spalten eingefügt werden müssen und dann stimmen die exportierten Spalten nicht mehr.
In diesem Zusammenhang ersuche ich dich bitte auch noch diesen Code "Ws.Cells(R, "BN") = Date" auch über den Namen lt. Namensmanager "CSVExportdatum_sevDesk" in die Spalte "BN" zu schreiben.
Ich habe es jetzt schon mit viel Mühe und Recherche versucht hinzubekommen, aber es gelingt mir nicht.
Danke für alles was du für mich machst.
LG
Bert
Userbild
Anzeige
AW: Bei Excel CSV Export Spalten-RF ändern
15.03.2022 19:59:28
Yal
Hallo Albert,
Du sagst:
"Wenn es irgendwie eine Lösung dafür gibt, dann sollen die Daten der Felder lt. Namensmanager "CSVExportbereich_sevDesk" in eine temporäre Datei exportiert werden und von dieser temporären Datei dann in Reihenfolge gebracht werden und dann in die endgültige CSV-Datei exportiert werden."
Ja, es ist eben genau, was ich bei meiner erste Antwort als vorgeschlagen hatte. Siehe https://www.herber.de/forum/archiv/1872to1876/1875087_Bei_Excel_CSV_Export_SpaltenRF_aendern.html#1875098
Es wäre dann eine Kopie des Blattes in einer separate, nicht gespeicherte Arbeitsmappe (speichern als Arbeitsmappe hat keine Mehrwert), dort die Umstellung der Reihenfolge, dann als CSV speichern.
In deiner Datei
https://www.herber.de/bbs/user/151738.zip
gibt es:
Userbild
Drittens, es ist ok, Erwartungen zu haben, aber wir verstehen uns als Helfer, nicht als Lieferer. Wenn Du selber den VBA-Basiswerk nicht im Griff hast, wirst Du unsere/meine Zugabe auch nicht handhaben können und Du bist stets auf gutmütiger Hilfe angewiesen. Daher würde ich meinerseits das hier einstellen. Es ist Dir natürlich frei, den Haken bei "Frage noch offen" zu stellen und auf Hilfe anderen zu hoffen.
VG
Yal
Anzeige
AW: Bei Excel CSV Export Spalten-RF ändern
16.03.2022 12:11:32
Albert
Hallo Yal,
danke für die Rückmeldung!
Den PKT Namen im Namensmanager doppelt, habe ich jetzt nachvollzogen. In der Originaldatei sind nämlich keine doppelt nur in der Beispieldatei die ich hochgeladen habe. Das muss dann irgendwie durch das kopieren passiert sein. Sorry, das ich das nicht bemerkt habe.
Ja, ich baue das dann so um wie du das am Anfang gemeint hast. Ich dachte als unwissender vieleicht gibt es eine elegantere Lösung für meine Problem.
Aber ich verstehe dich, das ich nachvollziehen können soll, was das Makro macht.
Kannst du mir bitte nur noch folgendes ermöglichen, weil ich es nicht hinbekomme. Alles andere glaube ich, das ich dann schaffe.
Bitte schreibe mir noch einen Code für das Kopieren in ein neues Tabellenblatt jener Daten lt. Namensmanager "CSVExportbereich_sevDesk"
(=Kunden!$A:$A;Kunden!$C:$G;Kunden!$J:$L;Kunden!$AC:$AG;Kunden!$AI:$AI;Kunden!$AN:$AO;Kunden!$AT:$AU;Kunden!$AX:$AY;Kunden!$BA:$BA)
und davon jene, bei denen in der Spalte lt. Namensmanager "Status_Kunden" (=Kunden!$BJ$5:$BJ$10004) der Wert *exportieren_BH* enthalten ist
incl. der Zeile 3 für die Überschriften.
Dann werden falls mal Spalten im Blatt Kunde eingefügt werden, immer die richtigen Daten kopiert.
Bitte, danke für deine Hilfe!
LG
Bert
Anzeige
AW: Bei Excel CSV Export Spalten-RF ändern
16.03.2022 14:09:19
Firmus
Hi Albert,
anbei eine Bearbeitung, die die Exportdaten in ein eigenes Sheet stellt.
https://www.herber.de/bbs/user/151802.zip
Teil-2: Spalten sortieren für den Export
Teil-3: Export in CSV
sind noch nicht gemacht.
Melde dich, falls du bei Teil-2 und Teil-3 noch Hilfe benötigst.
Ich werde die nächsten Tage daran weitermachen (meist abends) - einfach weil es Spaß macht.
Anmerkungen:
Die erste Zeile im Makro sollte immer Option explicit sein. Damit werden vergessene Variablen angemeckert. (Es gab eine)
Deine CSV zu öffnen zeigt immer zuerst einen Fehler bevor sie sich dann öffnen lässt. Es deine Ausgabe wirklich eine lupenreine CSV?
Gruß,
Firmus
AW: Bei Excel CSV Export Spalten-RF ändern
16.03.2022 14:15:12
Firmus
noch offen
AW: Bei Excel CSV Export Spalten-RF ändern
16.03.2022 14:16:49
Firmus
noch offen
AW: Bei Excel CSV Export Spalten-RF ändern
16.03.2022 21:43:51
Albert
Hi Firmus,
danke das du mir jetzt hilfst, das Projekt noch erfolgreich zu Ende zu bringen.
Durch dein Makro werden die Exportdaten schon mal richtig in ein eigenes Sheet gestellt.
Nur die Überschriftenfelder werden noch nicht exportiert. Ich habe es bis jetzt noch nicht hingekriegt, das die mitkopiert werden.
Am Teil 2 und Teil 3 arbeite ich, bis jetzt aber noch erfolglos.
Zu CSV: Was meinst du damit, ob die CSV eine lupenreine CSV ist? Gibt es andere CSVs auch? Die Dateiendung ist zumindest .CSV und bei mir lässt sich die exportierte CSV Datei ohne Fehlermeldung öffnen.
Ich wäre froh, wenn du mir noch weiterhilfst.
Bitte, danke!
Noch was: Beim Speichern deiner Datei die ich heruntergeladen habe kommt folgende Meldung. Warum kommt die?
Userbild
AW: Bei Excel CSV Export Spalten-RF ändern
17.03.2022 08:47:08
Firmus
Hi Albert,
die Meldung, die du bekommst wird von XLS ausgegeben.
Sie weist darauf hin, dass die XLS-Datei vllt. nicht komplett anonymisiert ist. (Keine Firma, kein Name, kein Pfad in der Datei erkennbar.)
Wenn Du die XLS offen hast, klick mal auf Datei links oben. Du wirst sehen, die meisten Daten, die in irgend einer Form auf Person oder IT-Umgebung
Rückschlüsse zulassen sind entfernt.
Wie erreiche das?
In der Datei klick auf Datei
Klick auf Optionen
klick auf Trust Center
klick auf "Einstellungen für Trust Center" (linke Seite am Bildschirm)
Klick auf Datenschutz Optionen
Klick auf Dokumentprüfung.
Achtung: "Kommentare" NICHT entfernen lassen, sonst sind deine Kommentare in der XLS weg.
Gruß,
Firmus
AW: Bei Excel CSV Export Spalten-RF ändern
17.03.2022 18:50:57
Albert
Danke für die Info Firmus!
AW: Bei Excel CSV Export Spalten-RF ändern
17.03.2022 22:14:54
Firmus
Hi Albert,
anbei eine aktualisierte Version des Makros.
https://www.herber.de/bbs/user/151832.zip
Enthalten sind:
1. Zuweisung der Export-Positionen zu den einzelnen Spalten
2. Einfügen der "Filler"-Positionen (Spalten ohne Daten)
3. Sortierung der Export-Datei gemäß Zielerwartung
4. Export (saveas der Kopie) des erzeugten Blattes in eine CSV-Datei
Achtung:
Wenn die Positionsnummern (Zeile 1 im Export) entfernt werden,
"schrumpft" die ausgegebene CSV auf die real existierenden Spalten zusammen.
Lass mich wissen wo es noch kneift.
Gruß,
Firmus
AW: Bei Excel CSV Export Spalten-RF ändern
17.03.2022 22:26:56
Albert
Hallo Firmus,
ich habe heute Abend wieder weitergearbeitet, aber nicht alles hinbekommen.
Bitte wieder um Hilfe!
Zu CSV Daten in neues Tabellenblatt kopieren:
Im Makro: "Sub ExportCSV_sevDesk_Kontaktdaten()"
Bei der Überschriftenzeile habe ich hinbekommen, das diese ins neue Tabellenblatt "AusG1" mitkopiert wird.
Mir gelingt es aber nicht, die kopierten Daten ins neue Tabellenblatt "AusG1" ohne eine Leerzeile in Zeile 1 zu kopieren (siehe hochgeladene Beispieldatei).
Bitte dafür um Hilfe!
Zu CSV Daten in CSV-Datei schreiben:
Im Makro: "Sub ExportCSV_sevDesk_Schreiben()"
Beim Absatz "For Each ColNr In Array ..." bei "Set Cell = Ws.Cells(lRow, ColNr)" kommt folgende Fehlermeldung, die ich nicht beheben kann (siehe hochgeladene Beispieldatei).
Bitte auch dafür um Hilfe!
Userbild
https://www.herber.de/bbs/user/151833.zip
MfG
Bert
AW: Bei Excel CSV Export Spalten-RF ändern
18.03.2022 10:31:25
Firmus
Hi Albert,
ich habe bei ...v2.xlsm weitergearbeitet.
https://www.herber.de/bbs/user/151832.zip ist nun die ....v4.xlsm.
Dort tritt dein oben beschriebener Fehler nicht auf.
Die Ausgabe der CSV verhält sich dort noch falsch.
Für Details siehe auch meinen letzten Eintrag von 17.02.2022 22:14:54
Ich habe auch schon eine Idee wie dieses fehlerhafte Verhalten behoben werden kann.
Das probiere ich heute/morgen aus und lade das Ergebnis wieder hoch.
Prüfe bitte die ...v4.xlsm und schreib mir wo das Makro noch von der Ergebniserwartung abweicht.
Gruß,
Firmus
...bin jetzt im Garten.
AW: Bei Excel CSV Export Spalten-RF ändern
14.03.2022 20:45:52
Albert
Hallo Yal und Firmus,
danke für die Rückmeldungen!
Ich benötige die Änderung der Spaltenreihenfolge im Prozess des CSV-Export erzeugen. Die Originaldatei darf nicht verändert werden.
Unten habe ich den gesamten CSV-Code eingefügt.
Am Ende nach den Zeichen ****************** habe ich den Code für die Änderung der Spaltenreihenfolge eingefügt.
Nach dem CSV-Export soll die CSV Datei geöffnet und die Spaltenreihenfolge geändert werden, wenn es im Zuge der Erstellung nicht möglich ist.
Problem: Die gespeicherte Datei hat jedesmal einen neuen Namen, weil beim speichern das Datum/Uhrzeit in den Dateinamen geschrieben wird.

Sub ExportCSV_sevDesk_Kontaktdaten()
' ExportCSV_Buchhalung_Kontaktdaten für sevDesk
Dim WS            As Excel.Worksheet
Dim rngColumn     As Excel.Range
Dim rngColumns    As Excel.Range
Dim Cell          As Excel.Range
Dim lColumnStatus As Long
Dim lRow          As Long
Dim lLastRow      As Long
Dim lFirstRow     As Long
Dim fd As FileDialog, rngTest As Range, rng As Range, fltr As FileDialogFilter
Dim i      As Long, line As String
Dim csvContent As String, fso As Object, csvFile As Object
Dim strFilePath As String
'Frage ob Makro ausgeführt werden soll
If MsgBox("Makro ausführen?", vbYesNo, "ExportCSV sevDesk-Kontaktdaten")  vbYes Then Exit Sub
' Blattschutz aufheben u. WS (Worksheet) = aktives Blatt
Sheets("Kunden").Unprotect
Set WS = ActiveSheet
' Speicherpfad und Dateiname incl. Zeitstempel
strFilePath = "C:\Users\Simon\Documents\Privat\Sonstiges\Albert\Kunden CSV-Exportdateien sevDesk\Export_sevDesk_Daten_" & Format(Now, "YYYY.MM.DD - HH.MM") & ".csv"
' Datei löschen wenn bereits vorhanden
If Dir(strFilePath)  "" Then Kill strFilePath
' Neue Datei öffnen
Set fso = CreateObject("Scripting.FileSystemObject")
Set csvFile = fso.OpenTextFile(strFilePath, 2, True)
' Erste Zeile ist Zeile 3
lFirstRow = 3
' letzte belegte Zeile in Spalte A
lLastRow = WS.Cells(WS.Rows.Count, "A").End(xlUp).Row
' Range-Eigenschaft erkennt Namen aus Namensmanager "CSVExportbereich_sevDesk"
lColumnStatus = WS.Range("Status_Kunden").Column
Set rngColumns = WS.Range("CSVExportbereich_sevDesk").Columns
' Exportieren wenn die Spalte Status "*exportieren_BH*" enthält und Zeile 3 für die Überschriften
For lRow = lFirstRow To lLastRow
If WS.Cells(lRow, lColumnStatus).Text Like "*exportieren_BH*" Or lRow = lFirstRow Then
line = ""
' Exportbereich (Iteration durch die betroffenen Exportspalten)
For Each rngColumn In rngColumns
' Hier Variable 'Cell' anstatt 'rng' verwenden für Range mit einzelner Zelle
Set Cell = WS.Cells(lRow, rngColumn.Column)
Debug.Print "Cell.Value = " & Cell.Value
line = line & Cell.Value & ";"
Next
' Exportdatum ab Zeile 4 in Spalte BN schreiben
lColumnExportdatum = WS.Range("CSVExportdatum_sevDesk").Column
If lRow > lFirstRow Then WS.Cells(lRow, lColumnExportdatum) = Date
' Daten für CSV-Inhalt erstellen
csvContent = csvContent & Left(line, Len(line) - 1) & vbNewLine
End If
Next
' In Spalte BN den Wert "exportieren_BH" mit dem Wert "Bereits_exportiert_BH" ersetzen
'        WS.Range("Status_Kunden").Replace What:="exportieren_BH", Replacement:="Bereits_exportiert_BH", LookAt:= _
'        xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
'        ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
'Blattschutz im Register Kunde aktivieren beim Speichern der Datei
'        Sheets("Kunden").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
'                , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
'                AllowFormattingRows:=True, AllowFiltering:=True, UserInterfaceOnly:=True
' Wenn CSV-Datenaufbereitung leer ist, dann MsgBox
If csvContent = "" Then MsgBox "Keine Daten gefunden": Exit Sub
' CSV-Datei erstellen
csvFile.Write (csvContent)
csvFile.Close
' Wenn CSV-Datei erstellt ist, dann MsgBox
If Err = 0 Then MsgBox "Datei erstellt" & vbLf & strFilePath, vbInformation, "CSV - Export"
'Erzeugtes csvFile öffnen und Spaltenreihenfolge herstellen für secDesk Import
'csvFile.Open --> Problem: Die gespeicherte Datei hat jedesmal einen neuen Namen,
'                 weil beim speichern das Datum/Uhrzeit in den Dateinamen geschrieben wird.
Columns("H:H").Select
Selection.Cut
Columns("A:A").Select
Selection.Insert Shift:=xlToRight
Columns("J:J").Select
Selection.Cut
Columns("B:B").Select
Selection.Insert Shift:=xlToRight
Columns("K:K").Select
Selection.Cut
Columns("C:C").Select
Selection.Insert Shift:=xlToRight
Columns("M:M").Select
Selection.Cut
Columns("D:D").Select
Selection.Insert Shift:=xlToRight
Columns("M:M").Select
Selection.Cut
Columns("E:E").Select
Selection.Insert Shift:=xlToRight
Columns("G:G").Select
Selection.Cut
Columns("F:F").Select
Selection.Insert Shift:=xlToRight
Columns("N:N").Select
Selection.Cut
Columns("H:H").Select
Selection.Insert Shift:=xlToRight
Columns("N:N").Select
Selection.Cut
Columns("I:I").Select
Selection.Insert Shift:=xlToRight
Columns("W:Y").Select
Selection.Cut
Columns("J:L").Select
Selection.Insert Shift:=xlToRight
Columns("P:P").Select
Selection.Cut
Columns("M:M").Select
Selection.Insert Shift:=xlToRight
Columns("O:P").Select
Selection.Cut
Columns("M:N").Select
Selection.Insert Shift:=xlToRight
Columns("Q:Q").Select
Selection.Cut
Columns("O:O").Select
Selection.Insert Shift:=xlToRight
Columns("Q:Q").Select
Selection.Cut
Columns("P:P").Select
Selection.Insert Shift:=xlToRight
Columns("Q:Q").Select
Selection.Cut
Columns("M:M").Select
Selection.Insert Shift:=xlToRight
Columns("X:X").Select
Selection.Cut
Columns("R:R").Select
Selection.Insert Shift:=xlToRight
Columns("X:Y").Select
Selection.Cut
Columns("S:T").Select
Selection.Insert Shift:=xlToRight
Columns("Z:Z").Select
Selection.Cut
Columns("U:U").Select
Selection.Insert Shift:=xlToRight
Columns("X:X").Select
Selection.Cut
Columns("V:V").Select
Selection.Insert Shift:=xlToRight
Columns("X:X").Select
Selection.Cut
Columns("W:W").Select
Selection.Insert Shift:=xlToRight
Columns("Z:Z").Select
Selection.Cut
Columns("X:X").Select
Selection.Insert Shift:=xlToRight
Columns("Z:Z").Select
Selection.Cut
Columns("Y:Y").Select
Selection.Insert Shift:=xlToRight
Columns("AA:AA").Select
Selection.Cut
Columns("Z:Z").Select
Selection.Insert Shift:=xlToRight
csvFile.Close
End Sub

43 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige