Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1540to1544
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

CSV-Export per VBA (bestimmter Bereich)

CSV-Export per VBA (bestimmter Bereich)
23.02.2017 16:15:27
Hendrik
Hallo liebe Excel-Community
jahrelang habe ich von diesem Forum und ähnlichen im Internet profitiert und musste noch nie selber einen Beitrag verfassen. Jetzt aber ist es soweit. Eventuell ist mein Thema zu speziell oder ich hab das Recherchieren verlernt. Nichtdestotrotz....hier ist mein Problem.
Ich möchte per VBA-Makro einen bestimmten Bereich eines Tabellenblattes (Spalten A bis P) und alle Zeilen, die in A einen Wert bzw. Text haben (wird per Formel errechnet) in eine CSV-Datei exportieren. Trennzeichen soll das Semikolon sein. Der Nutzer soll sich den Speicherort nicht frei auswählen dürfen, d.h. der Pfad ist festgelegt. Der Name der Datei soll in etwa so aussehen "BLABLABLATEXT_datum_zeit.csv".
Ich hab auch schon eine Teillösung erarbeitet, aber die ist so unreif, dass ich die hier nicht zeigen werde.
An dieser Stelle schon mal ein großes Dankeschön für eure Hilfe.
Beste Grüße
Hendrik

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
CSV-Export per VBA (bestimmter Bereich)
23.02.2017 16:58:45
Michael
Hi Hendrik,
teste mal:
Option Explicit
Function CSV_Erzeugen(blatt, Spalten$, Pfad$, t1$, t2$) As String
Dim aSp ' = as variant als Array
Dim z&, s&, st$, maxZ& ' & = as long z wie Zeile, $ = as string,
' s wie string für Ausgabe
Dim d As Integer ' d wie Dateinummer
On Error GoTo fehler
With Sheets(blatt)
aSp = Intersect(.Range(Spalten), .UsedRange)
End With
maxZ = UBound(aSp)
For z = 1 To maxZ
If aSp(z, 1)  "" Then
For s = 1 To UBound(aSp, 2) - 1
st = st & aSp(z, s) & t2
Next
st = st & aSp(z, s) & t1
End If
Next
' statt For-Schleife kannst Du auch mal join() testen
d = FreeFile
Open Pfad For Output As #1
Print #1, st
Close #1
fehler:
If Err.Number  0 Then CSV_Erzeugen = Err.Description Else CSV_Erzeugen = "ok"
End Function
Sub aufruf()
Dim Pfad$, Ergebnis$
Pfad = "C:\DeinPfad\DateiName_" & Format(Date, "YYYYMMDD") & _
"_" & Format(Time, "hhmmss") & ".csv"
'If Dir(Pfad) = "" Then
'  Ergebnis = CSV_Erzeugen("Tabelle1", "A1", Pfad, vbCrLf,";")
'  If Ergebnis = "ok" Then
'     MsgBox "Datei " & Pfad & " wurde erzeugt"
'    Else
'     MsgBox "Fehler: " & Ergebnis
'  End If
' Else
'  MsgBox "Datei bereits vorhanden"
'End If
' *** oder ganz einfach:
MsgBox CSV_Erzeugen("Tabelle2", "A:P", Pfad, vbCrLf, ";")
' Trennen z.B. mit: vblf, vbcr oder vbcrlf
End Sub
Schöne Grüße,
Michael
Anzeige
AW: CSV-Export per VBA (bestimmter Bereich)
24.02.2017 10:11:11
Hendrik
Hallo Michael,
erstmal vielen Dank für deine zügige Antwort. Leider funktioniert der Code bei mir nicht. Ich erhalte die Fehlermeldung "Index außerhalb des gültigen Bereichs". Ich habe den Speicherpfad angepasst. Muss ich sonst noch irgendwelche Anpassungen vornehmen?
Leider hab ich keine VBA-Erfahrung und kann den Code kaum lesen oder editieren. Nur offensichtliche Funktionen wie Range("A1:H8") oder Worksheets("Sheet1").Activate kann ich meinen Bedürfnissen anpassen, weil sie selbsterklärend sind. Alles andere brauche ich leider fertig vorgekaut (sorry).
CSV-Export per VBA (bestimmter Bereich)
24.02.2017 11:35:49
Michael
Hi,
ich vermute mal, daß Dein Tabellenblatt anders heißt als "Tabelle2".
Du mußt eigentlich nur CSV_Erzeugen mit den richtigen Parametern aufrufen, wie eben in aufruf() ganz unten.
CSV_Erzeugen ist eine FUNKTION, d.h. sie gibt einen Wert zurück, nämlich "ok", wenn alles glatt ging oder einen Fehlertext. D.h., Du kannst den Rückgabewert in einer msgbox ausgeben (wie im Beispiel) oder zunächst einer Variablen zuweisen:
Ergebnis = CSV_Erzeugen("Tabelle2", "A:P", Pfad, vbCrLf, ";")
und weiterverarbeiten:
If Ergebnis = "ok" Then
' tu dies und das
Else
msgbox Ergebnis
Exit Sub
End If
Beim Aufruf bedeuten die einzelnen Parameter:
CSV_Erzeugen("Tabelle2", "A:P", Pfad, vbCrLf, ";")
Name des Tabellenblatts
Spalten für Export
Pfad incl. Dateiname
Zeilentrennzeichen
Trennzeichen zwischen den Werten

Bei den Spalten für den Export werden NUR die Buchstaben angegeben; das Makro sucht sich dann selbst den Bereich, der Werte enthält, zusammen.
Falls Du damit nicht zurechtkommst, lade bitte mal ne Beispieldatei hoch, dann passe ich's Dir an.
Schöne Grüße,
Michael
Anzeige
AW: CSV-Export per VBA (bestimmter Bereich)
27.02.2017 14:05:44
Hendrik
Hallo Michael,
damit hast du mir wirklich sehr geholfen. Vielen Dank an dieser Stelle. Das Makro arbeitet einwandfrei und ich konnte es im letzten Schritt auch erfolgreich auf meine finalen Bedürfnisse anpassen.
Beste Grüße
Hendrik
In diesem Sinne
/closed
freut mich, gern geschehen,
27.02.2017 16:15:24
Michael
Hendrik,
und vielen Dank für die Rückmeldung!
Beste Grüße zurück,
Michael

12 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige