Hallo,
ich möchte mithilfe eines VBA Makro, eine Tabelle in einem bestimmten Format generieren. Also, ich habe eine Datei A, wo ich eine Spalte habe mit verschiedenen Zahlen, von der ich auch das Makro starte und eine Datei B, wo das Format der zu erstellenden CSV Datei ist. Die Datei B soll quasi einmal kopiert werden, damit in der kopierten Datei das Format ist und die eine Spalte aus Datei A soll in Datei B ausgewechselt werden.
Bislang habe ich den Code so geschrieben, dass ich die Datei B als Format auswählen kann und auch wieder speicher kann, aber das dazwischen fehlt mir noch. Ich weiß es ist schwer so etwas zu erklären, aber vielleicht kann mir da jemand helfen.
Sub Uebertragen()
Dim dateiname As String
Dim pfad As String
Dim ImportDatei As Variant
Dim wbImport As Workbook
Dim DatEingabe As String
dateiname = "Datenpunkte_" & Selection
dateiname = WorksheetFunction.Substitute(dateiname, ": ", "_")
dateiname = WorksheetFunction.Substitute(dateiname, " ", "_")
dateiname = WorksheetFunction.Substitute(dateiname, ".", "-")
dateiname = WorksheetFunction.Substitute(dateiname, Chr(10), "_")
MsgBox ("Bitte wählen Sie die Format-Datei (.csv) aus!")
ImportDatei = Application.GetOpenFilename(FileFilter:="Microsoft Excel-Dateien (*.csv), *.csv", Title:="Bitte wählen Sie eine Datei aus.")
If ImportDatei = False Then End 'Wenn keine Datei ausgewählt wird, alle Funktionen beenden
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(3)
'Zelle die auf Inhalt überprüft werden soll
Set rngTest = ws.Range("E1")
'Bereich der exportiert wird
Set rngExport = ws.Range("E2:E138")
If rngTest.Text <> "" Then
Set fd = Application.FileDialog(msoFileDialogSaveAs)
With fd
.Title = "Zielort festlegen."
'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
MsgBox ("Bitte wählen Sie einen Speicherort aus!")
'Wenn OK geklickt wurde starte Export
.InitialFileName = dateiname
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
|