Mittels VBA Makro Excel Zellen auslesen und diese in eine CSV Datei exportieren
Hallo zusammen
ich möchte gerne ein Makro schreiben, welches eine Zeile auf Inhalt überprüft und falls etwas drin steht, dass dann ein bestimmter Bereich (z. B. A1:D5) in eine CSV Datei exportiert wird. Bevor die CSV Datei gespeichert wird sollte es noch möglich sein den Dateinamen anzupassen, falls man dies möchte.
Könnt ihr mir vllt. einige Tipps sagen oder wie ich am besten, mit welcher Methode beginnen sollte.
Danke im Voraus!
LG
winkid
ich möchte gerne ein Makro schreiben, welches eine Zeile auf Inhalt überprüft und falls etwas drin steht, dass dann ein bestimmter Bereich (z. B. A1:D5) in eine CSV Datei exportiert wird. Bevor die CSV Datei gespeichert wird sollte es noch möglich sein den Dateinamen anzupassen, falls man dies möchte.
Könnt ihr mir vllt. einige Tipps sagen oder wie ich am besten, mit welcher Methode beginnen sollte.
Danke im Voraus!
LG
winkid
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 240180
Url: https://administrator.de/contentid/240180
Ausgedruckt am: 22.11.2024 um 03:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo windowskid,
habe hier schon des öfteren dieses Thema behandelt, leider hat der jeweilige User alle seine Beiträge löschen lassen und somit sind diese Beiträge leider weg.(hoffe du machst das nicht auch ). Deswegen hier nochmal der entsprechende Code.
Das gewünschte kannst du hiermit machen: (Kommentare für die Anpassung an deine Zellen stehen im Code)
Zum starten muss die Prozedur TestRange ausgeführt werden.
Eine Demo für den Im- und Export von Excel-Ranges kannst du dir auch in diesem Demo-Sheet anschauen)
Grüße Uwe
habe hier schon des öfteren dieses Thema behandelt, leider hat der jeweilige User alle seine Beiträge löschen lassen und somit sind diese Beiträge leider weg.(hoffe du machst das nicht auch ). Deswegen hier nochmal der entsprechende Code.
Das gewünschte kannst du hiermit machen: (Kommentare für die Anpassung an deine Zellen stehen im Code)
Zum starten muss die Prozedur TestRange ausgeführt werden.
Sub TestRange()
Dim ws As Worksheet, fd As FileDialog, rngTest As Range, rngExport As Range, fltr As FileDialogFilter
'Worksheet auf dem die Daten stehen
Set ws = Worksheets(1)
'Zelle die auf Inhalt überprüft werden soll
Set rngTest = ws.Range("A1")
'Bereich der exportiert wird
Set rngExport = ws.Range("A1:D5")
If rngTest.Text <> "" Then
Set fd = Application.FileDialog(msoFileDialogSaveAs)
With fd
.Title = "Wählen sie einen Namen unter der die CSV-Datei gespeichert werden soll"
'Filterindex für CSV-Dateien ermitteln
For i = 1 To .Filters.Count
If .Filters(i).Extensions = "*.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
'Prozedur für den Export eines Ranges in eine CSV-Datei
Sub ExportRangeAsCSV(ByVal rng As Range, delim As String, filepath As String)
Dim arr As Variant, line As String, csvContent As String, fso As Object, csvFile As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set csvFile = fso.OpenTextFile(filepath, 2, True)
arr = rng.Value
If IsArray(arr) Then
For r = 1 To UBound(arr, 1)
line = ""
For c = 1 To UBound(arr, 2)
If c < UBound(arr, 2) Then
line = line & """" & arr(r, c) & """" & delim
Else
line = line & """" & arr(r, c) & """"
End If
Next
csvContent = csvContent & line & vbNewLine
Next
csvFile.Write (csvContent)
csvFile.Close
Else
MsgBox "Bereich besteht nur aus einer Zelle!", vbExclamation
End If
Set fso = Nothing
Set csvFile = Nothing
End Sub
Grüße Uwe
Hallo colinardo,
zuerst zu deiner Befürchtung das ich das wieder löschen könnte. Du kannst dir sicher sein das von mir nichts gelöscht wird, was irgendwie anderen noch zum Nutzen sein kann schließlich muß man ja heut zu Tage froh sein, wenn sich in der Müllhalde "Internet" noch solche Hoffnungsschimmer wie dieses respektvolle und vor allem Wissen vermittelnde Forum gibt. Leider gibt es diese Art Foren nur noch sehr selten, also müssen wir das auch erhalten !
Deine Lösung ist eine ganz fantastische Lösung wenn man mit externen Dateien arbeiten möchte. Ich habe nur eine Mappe mit immer mehr werdenden Blättern. Das aktuelle ist immer sichtbar , ältere hingegen werden automatisch ausgeblendet. Es gibt einen Archivbutton der mir die versteckten Reiter wieder anzeigt und so ist es gut. Jedoch möchte ich genau aus diesen automatisch generierten Blättern gewisse Zellen in ein anderes Blatt schreiben lassen. Eben so eine Art automatischer Bezug der Zellen. Wenn ich nun mein nächstes Aufmaß schreiben möchte generiere ich mir ein neues Blatt via Button und dieses bekommt automatisch einen neuen Namen der da z.B. heißt : "3.Aufmaß - 10.08.2014". Trage ich da z.B. in B2 etwas ein kann das ja nicht von dem fest eingerichteten Blatt übernommen werden, da es noch keinen Bezug auf dieses Blatt gibt. ( es hat einen vorher nicht bekannten Namen um diesen bei den Bezügen berücksichtigen zu können)
zuerst zu deiner Befürchtung das ich das wieder löschen könnte. Du kannst dir sicher sein das von mir nichts gelöscht wird, was irgendwie anderen noch zum Nutzen sein kann schließlich muß man ja heut zu Tage froh sein, wenn sich in der Müllhalde "Internet" noch solche Hoffnungsschimmer wie dieses respektvolle und vor allem Wissen vermittelnde Forum gibt. Leider gibt es diese Art Foren nur noch sehr selten, also müssen wir das auch erhalten !
Deine Lösung ist eine ganz fantastische Lösung wenn man mit externen Dateien arbeiten möchte. Ich habe nur eine Mappe mit immer mehr werdenden Blättern. Das aktuelle ist immer sichtbar , ältere hingegen werden automatisch ausgeblendet. Es gibt einen Archivbutton der mir die versteckten Reiter wieder anzeigt und so ist es gut. Jedoch möchte ich genau aus diesen automatisch generierten Blättern gewisse Zellen in ein anderes Blatt schreiben lassen. Eben so eine Art automatischer Bezug der Zellen. Wenn ich nun mein nächstes Aufmaß schreiben möchte generiere ich mir ein neues Blatt via Button und dieses bekommt automatisch einen neuen Namen der da z.B. heißt : "3.Aufmaß - 10.08.2014". Trage ich da z.B. in B2 etwas ein kann das ja nicht von dem fest eingerichteten Blatt übernommen werden, da es noch keinen Bezug auf dieses Blatt gibt. ( es hat einen vorher nicht bekannten Namen um diesen bei den Bezügen berücksichtigen zu können)