Anzeige
Archiv - Navigation
1344to1348
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
CSV-File erstellen
24.01.2014 11:30:11
Beat
Liebe Helfer,
Ich wäre wieder einmal froh um eure immerzu hilfreichen Inputs !
Ich habe folgendes Makro zum Erstellen eines CSV-Files (die Daten stehen exklusiv in einer eignen Tabelle ab Zelle A1):
----------------------------------------------
Sub CSVICFY()
' CSVICFY Makro
' Erstellt CSV für IC FullYear zum Upload in SAP FIM
' Tastenkombination: Strg+f
Sheets("Upload IC FY").Select
Range("A1").Select
Dim SrcRg As Range
Dim CurrRow As Range
Dim CurrCell As Range
Dim CurrTextStr As String
Dim ListSep As String
Dim FName As Variant
FName = Application.GetSaveAsFilename("Upload_SAPFIM_ICFY_BGT14-16_201309xx_1", "CSV File (*. _
csv), *.csv")
ListSep = Application.International(xlListSeparator)
If Selection.Cells.Count > 1 Then
Set SrcRg = Selection
Else
Set SrcRg = ActiveSheet.UsedRange
End If
Open FName For Output As #1
For Each CurrRow In SrcRg.Rows
CurrTextStr = ìî
For Each CurrCell In CurrRow.Cells
CurrTextStr = CurrTextStr & CurrCell.Value & ListSep
Next
While Right(CurrTextStr, 1) = ListSep
CurrTextStr = Left(CurrTextStr, Len(CurrTextStr) - 1)
Wend
Print #1, CurrTextStr
Next
Close #1
End Sub

-----------------------------------------
Einziger Wehrmutstropfen hier: nach dem Speichern muss ich das Makro jeweils mit debuggen schliessen... Damit kann (muss) ich momentan leben.
Nun habe ich die Ausganglage, dass die Werte nicht mehr exklusiv in einer eigenen Tabelle, sondern sich die Tabelle "Uploadfile" mit anderen Listen teilen müssen. Die für den Upload relevanten Daten sind in den Spalten AB:AJ.
Manuell würde ich jetzt diese Tabelle kopieren, die Werte fixieren, Spalten A:AA löschen und dann speichern als CSV.
Hat jemand eine Idee, wie ich das elegant über ein Makro machen kann?
Könnte ich dabei evtl. einen Filenamen vorschlagen, der sich zusammensetzt aus z.B. =verketten("Upload_DWH_";Settings!A1;"_";Settings!A5;Settings!A6;"_";Settings!A7), wobei A1 die Gesellschaftsnummer, A5 das Jahr, A6 den Rapportierungsmonat und A7 die aktuelle Zeit =(jetzt) bringen würde.
Super wäre da natürlich, wenn das Makro nach dem Speicher nicht mit debuggen beendet werden müsste. -> Der Speicherort wird im alten Makro nur vorgeschlagen, darum wird sich das Makro wohl nicht selber beenden können. Tragisch wäre aus meiner Sicht nicht, wenn das neue Makro die Datei dann halt einfach auf dem Desktop ablegt. Aufgrund des Dateinamens wird der User die Datei dann finden können.
Schon jetzt herzlichen Dank.
Viele Grüsse
Beat

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV-File erstellen
24.01.2014 14:41:45
fcs
Hallo Beat,
ich hab dein Makro mal um die gewünschten Funktionen ergänzt.
Ein paar Sachen im Makro musst du ggf. noch anpassen, z.B. das vorgewählte Verzeichnis für die CSV-Datei.
Warum das Makro bei dir zum Schluss in einen Fehler läuft kann ich nicht nachvollziehen. Bei mir läuft es ohne Probleme.
Gruß
Franz
Sub CSVICFY_neu_20140124()
' CSVICFY Makro
' Erstellt CSV für IC FullYear zum Upload in SAP FIM
' Tastenkombination: Strg+f
Dim wks As Worksheet
Dim SrcRg As Range
Dim CurrRow As Range
Dim CurrCell As Range
Dim CurrTextStr As String
Dim ListSep As String
Dim FName As Variant, FPath As String
Dim FF As Integer
'Vorgabe-Verzeichnis der CSV-Datei
FPath = ActiveWorkbook.Path         'Verzeichnis der aktiven Arbeitsmappe
FPath = "C:\Users\" & VBA.Environ("Username") & "\Desktop" '"C:\Users\" ggf. anpassen
FPath = FPath & Application.PathSeparator
'Vorgabe-Dateiname aus Werten im Blatt Settings bilden
With Worksheets("Settings")
.Range("A7").Calculate
FName = "Upload_DWH_" & .Range("A1").Text & "_" & .Range("A5").Text _
& .Range("A6").Text & "_" & Format(.Range("A7"), "hhmmss") & ".csv"
End With
'Auswahldialog für Dateinahme anzeigen
FName = Application.GetSaveAsFilename(FPath & FName, "CSV File (*.csv), *.csv")
If FName = False Then Exit Sub
Set wks = ActiveWorkbook.Sheets("Uploadfile") 'Name ggf. anpassen
'Blatt in temproräres Blatt kopieren
wks.Copy after:=wks
Set wks = ActiveSheet
wks.Name = "UploadFile " & Format(Now, "YYYYMMDD hhmmss")
With wks
'Formeln durch Werte ersetzen
With .UsedRange
.Copy
.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
End With
'Spalten löschen
.Range("A:AA").EntireColumn.Delete shift:=xlShiftToLeft
End With
Range("A1").Select
ListSep = Application.International(xlListSeparator)
If Selection.Cells.Count > 1 Then
Set SrcRg = Selection
Else
Set SrcRg = ActiveSheet.UsedRange
End If
FF = FreeFile
Open FName For Output As #FF
For Each CurrRow In SrcRg.Rows
CurrTextStr = "" '   ìî
For Each CurrCell In CurrRow.Cells
CurrTextStr = CurrTextStr & CurrCell.Value & ListSep
Next
While Right(CurrTextStr, 1) = ListSep
CurrTextStr = Left(CurrTextStr, Len(CurrTextStr) - 1)
Wend
Print #FF, CurrTextStr
Next
Close #FF
'temporäre Blattkopie wieder löschen
Application.DisplayAlerts = False
wks.Delete
Application.DisplayAlerts = True
End Sub

Anzeige
AW: CSV-File erstellen
24.01.2014 15:45:48
Beat
Hallo Franz,
Schon mal ganz herzlichen Dank für deine Arbeit!
Soweit ich verstehe, was du programmiert hast, habe ich einzelne Eintragungen angepasst. Das CSV-File wird erstellt und auf dem Desktop abgelegt - nur leider ist das File noch leer und die Datumsangabe bleibt noch bei null stehen (Upload_DWH_90800210_ACT2013000000.csv). Ich 'pröble' weiter dran rum - aber evtl. hast du eine Idee, warum das so sein könnte.
Viele Grüsse
Beat

AW: CSV-File erstellen
24.01.2014 15:58:30
Beat
Hallo Franz,
ich hab's raus - das File wird erstellt - alle Daten sind da. Genial!!!
Nochmals vielen Dank.
Gruss Beat
Anzeige

147 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige