Anzeige
Archiv - Navigation
1864to1868
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

Datenbereich mit VBA in CSV exportiieren

Datenbereich mit VBA in CSV exportiieren
18.01.2022 18:20:13
Albert
Hallo,
ich möchte mit dem Makro siehe unten Daten aus einem Datenbereich "C4:H30", "S4:U300" alle Zeilen als CSV-Datei exportieren,
welche in Bereich AJ4:AJ300 den Wert "exportieren_TEL" enthalten. Diese Status Zellen enthalten aber auch noch ander Statuswerte.
Nun bekomme ich aber immer eine Fehlermeldung
Fehler beim Kompilieren:

Sub oder 

Function nicht definiert  --> welches sich auf den Makroinhalt "ExportRangeAsCSV" siehe ganz unten bezieht (ist blau markiert)
Kann mir bitte jemand daraus ein lauffähiges Makro machen.
Danke!

Sub ExportCSV()
Dim ws As Worksheet, fd As FileDialog, rngTest As Range, rngExport As Range, fltr As FileDialogFilter
'Worksheet auf dem die Daten stehen
Set ws = Kunden
'Zelle die auf Inhalt überprüft werden soll
Set rngTest = ws.Range("AJ4:AJ300")
'Bereich der exportiert wird
Set rngExport = ws.Range("C4:H30", "S4:U300")
If rngTest.Text = "exportieren_TEL" Then
Set fd = Application.FileDialog(msoFileDialogSaveAs)
With fd
.Title = "exportieren_TEL_Daten"
'Filterindex für CSV-Dateien ermitteln
For i = 1 To .Filters.Count
If .Filters(i).Extensions = "vis_order.csv" Then
.FilterIndex = i
Exit For
End If
Next
'Wenn OK geklickt wurde starte Export
If .Show = True Then
ExportRangeAsCSV rngExport, ";", .SelectedItems(1)
End If
End With
End If
End Sub

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenbereich mit VBA in CSV exportiieren
18.01.2022 21:20:57
ralf_b
ExportRangeAsCSV ist eine separate Funktion, in welcher der eigentliche Export ausgeführt wird. Kannst du die auch irgendwo herzaubern?
AW: Datenbereich mit VBA in CSV exportiieren
19.01.2022 08:19:47
Albert
GM Ralf!
Danke für die schnelle Antwort.
Da ich in VBA nicht gut bin, verstehe ich deine Frage nicht ob ich ExportRangeAsCSV irgendwo herzaubern kann?
Oder meinst du damit, das man das Makro nicht so ändern kann, das es funktioniert?
Falls das der Fall ist, wurde ich dich ersuchen ob du mir bitte ein Makro schreiben würdest welches funktioniert.
Bitte, danke!
AW: Datenbereich mit VBA in CSV exportiieren
19.01.2022 08:20:46
Albert
GM Ralf!
Danke für die schnelle Antwort.
Da ich in VBA nicht gut bin, verstehe ich deine Frage nicht ob ich ExportRangeAsCSV irgendwo herzaubern kann?
Oder meinst du damit, das man das Makro nicht so ändern kann, das es funktioniert?
Falls das der Fall ist, wurde ich dich ersuchen ob du mir bitte ein Makro schreiben würdest welches funktioniert.
Bitte, danke!
Anzeige
AW: Datenbereich mit VBA in CSV exportiieren
19.01.2022 14:41:54
Piet
Hallo
ich versuche die Frage von Ralf einmal in einfachen Worten zu erklären. Un vorbereitetdf hoffe das es mir gleingit
Weil ich noch nie einen CSV Export gemacht habe habe ich aus Neugier mal meine Testdatei fürs Forum als CSV exportiert und bekam die Meldung:
"Es kann nur 1 Tabelle als CSV exportiert werden!" - .Das Ergebnis war das erste Blatt im Original mit verstreuten Daten, als Recorder Code aufgezeichnet.
Ich gehe davon aus das "ExportRangetoCSV" ein zweites Makro ist, das den Export,vorbereitet,und die gewünschten Daten als Range zusammenstellt.
Wenn es ein zweites Makro gibt können wir das nicht einfach mal so schreiben, ohne von dir gezeigt zu bekommen wie das Exportblatt nach dem Export aussieht!
Schau bitte mal im VBA Editor in den Modilen nach ob da ein Code mit Sub davor steht! Sonst musst du uns eine CSV Datei hochladen um den Code zu rekonstruieren.
mfg Piet
Anzeige
AW: Datenbereich mit VBA in CSV exportiieren
19.01.2022 14:45:22
Piet
Nachtrag: - wer hat diesen Code entwickelt, der müsste ihn ja kennen! Oder stammt der Code aus dem Internet? Dann gehört der zweite Teil mit dazu!
AW: Datenbereich mit VBA in CSV exportiieren
19.01.2022 21:31:34
Albert
https://www.herber.de/bbs/user/150523.xlsm
Hallo Piet,
danke für die Erklärung.
Ja, ich habe den Code aus dem Internet. Dabei habe ich übersehen, das der zweite Code auch dazugehört.
Ich habe diesen jetzt noch eingeügt aber es läuft trotzdem nicht.
Nach über 10 Stunden anpassen und probieren kriege ich diesen nciht zum laufen.
Deshalb lade ich jetzt meine anonümisierte Datei hoch mit dem vollständigen Original-Code. Nur die Bezüge und Blattschutz habe ich hier angepasst.
Das Makro heisst: ExportCSV
Bitte um Unterstützung, dass ich mein anfangs beschriebenes Problem gelöst bekomme.
Vorab vielen vielen Dank für die Bemühungen!
LG
Albert
Anzeige
AW: Datenbereich mit VBA in CSV exportiieren
19.01.2022 23:33:19
ralf_b
du vergleichst den gesamten Text der Zelle mit dem Suchwort. Dort sind aber noch andere Texte drin. Also Lösung ist ein Mustervergleich.
diese Zeile entsprechend anpassen.

If rngTest.Text Like "*exportieren_TEL*" Then      '--> Export alle Zeilen mit "exportieren_TEL" in Sp J

AW: Datenbereich mit VBA in CSV exportiieren
20.01.2022 10:57:31
Albert
Hallo Ralf,
danke für deine Unterstützung!
Ich habe deinen Code eingefügt aber ich bekomme es trotzdem nicht zum Laufen.
Es kommen an mehreren Stellen noch Fehlermeldungen bzw. werden Teile des Codes nicht abgearbeitet.
Könntest du bitte in die Exceldatei die ich gestern hochgeladen habe, deinen Code einfügen und dann bitte das Makro testen und die Fehler beheben.
Ich kriege es leider nicht hin.
Bitte, danke!
Anzeige
AW: Datenbereich mit VBA in CSV exportiieren
20.01.2022 22:47:43
ralf_b
versuchs mal damit. nichts Anderes.

Sub ExportCSV()
Dim ws     As Worksheet, 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
Sheets("Kunden").Unprotect
' Blattschutz aufheben
Set fd = Application.FileDialog(msoFileDialogSaveAs)
With fd
.Title = "exportieren_TEL_Daten"
'Filterindex für CSV-Dateien ermitteln
For i = 1 To .Filters.Count
If .Filters(i).Extensions = "vis_order.csv" Then
.FilterIndex = i
Exit For
End If
Next
End With
'Wenn OK geklickt wurde starte Export
If fd.Show = True Then
Set fso = CreateObject("Scripting.FileSystemObject")
Set csvFile = fso.OpenTextFile(fd.SelectedItems(1), 2, True)
'Worksheet auf dem die Daten stehen
Set ws = Worksheets("Kunden")
For Each rngTest In ws.Range("AJ5:AJ30").Cells  'Anzahl der zu prüfenden Zeilen festlegen
If rngTest.Text Like "*exportieren_TEL*" Then
i = rngTest.Row
line = ""
For Each rng In ws.Range("C" & i & ":H" & i & "," & "S" & i & ":U" & i) ' C:H, S:U
line = line & "" & rng.Value & "" & ";"
Next
csvContent = csvContent & Left(line, Len(line) - 1) & vbNewLine
End If
Next
If csvContent = "" Then MsgBox "Keine Daten gefunden": Exit Sub
csvFile.Write (csvContent)
csvFile.Close
End If
'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
End Sub

Anzeige
AW: Datenbereich mit VBA in CSV exportiieren
21.01.2022 12:30:51
Albert
Perfekt, danke Ralf!
Kannst du mit bitte noch folgendes einbauen das:
1 die Überschriften aus Zeile 3 mit exportiert werden
2 Dateipfad und Dateiname zum speichern mitgegeben werden und als MsgBox angezeigt werden
2.1 C:\Users\Simon\Documents\Privat\Sonstiges\Albert und Export_Tel_Daten.csv
Frage:
3 Kann die Schleife ev. nur so oft durchlaufen werden als Daten zum exportieren lt. Status "exportieren_TEL" vorhanden sind?
Bitte nochmals um deine profesionelle Hilfe.
Da ist man selber ein Armutschgerl.
AW: Datenbereich mit VBA in CSV exportiieren
21.01.2022 20:17:30
ralf_b

Zitat: Perfekt, danke Ralf!  Gerne, das reicht nun aber auch.
Funktionalitäten nachbestellen ist kein schöner Zug. Du wusstest doch schon vorher was du haben willst und was nicht.
1 die Überschriften aus Zeile 3 mit exportiert werden -schwierig
2 Dateipfad und Dateiname zum speichern mitgegeben werden und als MsgBox angezeigt werden
2.1 C:\Users\Simon\Documents\Privat\Sonstiges\Albert und Export_Tel_Daten.csv -
siehe hier: https://www.herber.de/forum/archiv/1372to1376/1372286_Speichern_Unter.html
Wenn du den Dateinamen im Dialog auswählst, kann der Pfad schon vorgegeben werden.
Soll das wegfallen und nur eine MsgBox für das Ende des Exports gezeigt werden?
3. Kann die Schleife ev. nur so oft durchlaufen werden als Daten zum exportieren lt. Status "exportieren_TEL" vorhanden sind? 
Warum? Die Schleife muß über alle Zeilen laufen, um dann den Zellwert auf den Textinhalt zu prüfen.
Wenn die Suchfunktion auf eine andere Vba-Routine umgebaut werden soll, dann habe ich meine Zeit für Nothing investiert. 

gruß
rb
Anzeige
AW: Datenbereich mit VBA in CSV exportiieren
22.01.2022 11:27:38
Albert
Entschuldige Ralf, ich wollte dich in keinster Weise verärgern, und ich bin so froh, dass du mir das gemacht hast.
Es ist auf keinen Fall für "nichts gewesen", weil ich dein Makro sowieso verwenden werde. Es ist genau das was ich brauche.
Bzgl. Funktionalitäten nachbestellen bin ich erst auf Grund des Ergebnisses auf die Ideen gekommen, dass
die nachgereichten Punkt schön wären, wenn diese auch noch möglich wäre.
zu 2: Das mit Dateipfad und Dateiname lassen wir so, wie es von dir gelöst ist. Es wird ja nicht so oft exportiert und daher nicht so wichtig.
Z.I. Das Makro lt deinem Link bekomme ichtrotz Anpassungen nicht zum laufen: https://www.herber.de/forum/archiv/1372to1376/1372286_Speichern_Unter.html
zu 3: Wegen der Schleife habe ich als unwissender gefragt, weil mir beim durchlaufen im Einzelschrittmodus aufgefallen ist, dass
das Makro halt oft die Schleife macht. Ich hatte als Laie keine Ahnung, dass dadurch alles umzubauen wäre. Das lassen wir natürlich auch so wie es ist.
Darf ich trotz der Verärgerung die ich ausgelöst habe, bitte noch Fragen, ob du mir folgendes noch realisieren könntes, wenn es technisch möglich ist:
1 Die Überschriften aus Zeile 3 mit exportieren, falls dies mit vertretbaren Aufwand für dich lösbar ist.
Wenn das nicht möglich ist, dann schreibe ich vor dem Aufruf des Makros in die Überschriftenzeile in Zelle "AJ3" = exportieren_TEL hinein und
ändere den Bereich im Makro auf AJ3 --> For Each rngTest In ws.Range("AJ3:AJ30"). Das habe ich getestet und funktioniert.
2 Ja, eine MsgBox für das Ende des Exports wäre schön wenn das angezeigt wird.
Danke nochmals für deine Tolle und perfekte Unterstützung.
FG
Albert
Anzeige
AW: Datenbereich mit VBA in CSV exportiieren
22.01.2022 16:48:24
ralf_b

Sub ExportCSV()
Dim ws     As Worksheet, fd As FileDialog, rngTest As Range, rng As Range, fltr As FileDialogFilter
Dim i      As Long, lRow As Long, lLastRow As Long, line As String
Dim csvContent As String, fso As Object, csvFile As Object
Dim strFilePath As String
strFilePath = "F:\test\Albert und Export_Tel_Daten.csv" 'anpassen
'C:\Users\Simon\Documents\Privat\Sonstiges\Albert und Export_Tel_Daten.csv
Sheets("Kunden").Unprotect
If Dir(strFilePath)  "" Then Kill strFilePath  'datei löschen wenn vorhanden
Set fso = CreateObject("Scripting.FileSystemObject")
Set csvFile = fso.OpenTextFile(strFilePath, 2, True)
'Worksheet auf dem die Daten stehen
Set ws = Worksheets("Kunden")
lLastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row 'letzte belegte Zeile in Spalte A
For lRow = 3 To lLastRow
If ws.Cells(lRow, "AJ").Text Like "*exportieren_TEL*" Or lRow = 3 Then
line = ""
For Each rng In ws.Range("C" & lRow & ":H" & lRow & "," & "S" & lRow & ":U" & lRow) ' C:H, S:U
line = line & "" & rng.Value & "" & ";"
Next
csvContent = csvContent & Left(line, Len(line) - 1) & vbNewLine
End If
Next
If csvContent = "" Then MsgBox "Keine Daten gefunden": Exit Sub
csvFile.Write (csvContent)
csvFile.Close
If Err = 0 Then MsgBox "Datei erstellt" & vbLf & strFilePath, vbInformation, "CSV - Export"
'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
End Sub

Anzeige
AW: Datenbereich mit VBA in CSV exportiieren
22.01.2022 19:28:43
Albert
Perfekt, danke Ralf!
Darf ich mir wirklich als letzten Ergänzung noch folgendes wünschen (wenn nicht ist es auch OK)
1 Ist es möglich das aktuelle Datum im Dateinamen noch anzufügen, dann würde die Datei nicht überschrieben werden
strFilePath = "C:\Users\Simon\Documents\Privat\Sonstiges\Albert\CSV Exportdateien\Export_Tel_Daten.csv"
strFilePath = "C:\Users\Simon\Documents\Privat\Sonstiges\Albert\CSV Exportdateien\Export_Tel_Daten_tt.mm.jjjj.csv"
2 Kann man bei den Zeilen die den Wert "exportieren_TEL" enthalten (Daten die exportiert werden) in Spalte "AM" noch ein aktuelles Datum für den Export schreiben
Bitte, danke!
FG
Albert
Anzeige
AW: Datenbereich mit VBA in CSV exportiieren
22.01.2022 22:30:36
ralf_b
echt jetzt?

strFilePath = "F:\test\Albert und Export_Tel_Daten_" & Format(Date, "dd_mm_YYYY") & ".csv" 'anpassen
Next
 ws.Cells(lRow, "AM") = Date
csvContent = csvContent & Left(line, Len(line) - 1) & vbNewLine

AW: Datenbereich mit VBA in CSV exportiieren
23.01.2022 09:06:02
Albert
Danke Ralf, dass du mir das noch gemacht hast.
Ein kleines Problem hat sich noch ergeben:
Dieser Code schreibt leider das Exportdatum auch in die Überschriftenzeile in die Zelle "AM3". Da soll bitte kein Datum stehen.
ws.Cells(lRow, "AM") = Date
Könntest du das bitte für mich auch noch beheben.
Danke!
Ich habe eh schon ein voll schlechtes Gewissen. Aber ich bekomme als VBA Laie sowas einfach nicht gelöst.
Ich kann halt nur Makro aufzeichnen. Das hat bisher für meine Anforderungen immer gereicht.
Ohne deine Tolle Unterstützung wäre eine solche Lösung für mich unmöglich zu realisieren und ich bin dir unendlich dankbar dafür.
Bitte verzeih mir auch die unbeholfenheit bei der unfollständigen Formulierung meiner Anforderungen.
FG
Albert
AW: Datenbereich mit VBA in CSV exportiieren
23.01.2022 11:31:01
ralf_b
nunja, mit Makrorekorder fängt es an. Man sollte denken das der Nutzer im Laufe der Zeit einfache Zusammenhänge versteht und durch Recherche langsam aber sicher simple Codestücke zusammen bekommt. Und hier solltest du eigentlich selbst eine Lösung finden können.
Wie komme ich darauf? Du hast die Änderung für das Datum gesehen. Du siehst das es eine Ergänzung an einer bestimmten Stelle des Programmablaufes ist ohne das der umgebende Code verändert wurde. Somit ist diese Zeile autark. Der umgebende Code ist bereits durch Bedingungen soweit eingeschränkt, das nur die relevanten Zeilen hier verarbeitet werden.
Deine Anforderung Zeile 3 mit einzubeziehen wurde mit dem Bedingungszusatz "or lrow = 3" umgesetzt.
Nun die Frage. Wie schließt man das Einfügen des Datums für diese Zeile aus?
AW: Datenbereich mit VBA in CSV exportiieren
24.01.2022 11:03:03
Albert
Danke, das du dich nochmals gemeldet hast.
Aber wenn ich "Or lRow = 3" entferne, dann wird die Überschriftenzeile nicht mehr mitexportiert.
Aber die Überschriftenzeile will ich dabei haben.
Das offene Problem dabei ist, dass das Exportdatum auch in die Überschriftenzeile in die Zelle "AM3" geschrieben wird. Da sollte aber kein Datum stehen sondern der Text "CSV-Exportdatum" stehen bleiben.
Und den Befehl # ws.Cells(lRow, "AM") = Date # ändern auf # ws.Cells(lRow, "AM4:AM") = Date # geht leider nicht.
Ich habe jetzt folgenden Code vor dem Ende eingebaut:
Range("AM2").Select # in dieser Hilfszelle steht der Wert "CSV-Exportdatum" drinnen
Selection.Copy
Range("AM3").Select
ActiveSheet.Paste
Damit wird das zuvor eingetragene Datum wieder mit der Überschrift überschrieben.
Danke nochmals für deine Geduld mit einem Unfähigen.
FG
Albert
AW: Datenbereich mit VBA in CSV exportiieren
24.01.2022 17:26:52
ralf_b

if lrow > 3  then ws.Cells(lRow, "AM") = Date
das wäre die Lösung, die ich von dir erhofft hatte zu lesen.
Beim Programmieren geht es darum Abläufe zu automatisieren. Das sind keine großen Geheimnisse. Eine einfache IF Bedingung, um die betroffene Zeile auszuschließen, ist Basiswissen. Vorausgesetzt du kapierst was der Code wann tut.
Die 3 beschreibt die Grenze nach welcher Zeile (hier also die 4) das Datum eingetragen wird. Das kannst du anpassen wie du lustig bist.
AW: Datenbereich mit VBA in CSV exportiieren
24.01.2022 18:57:18
Albert
Ja, wenn man es fertig sieht, dann ist es auch für mich nachvollziehbar.
Aber mir fehlt halt das Wissen, was man an welcher Stelle wie schreibt.
Danke nochmals Ralf für deine Geduld mit mir!

309 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige