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