Anzeige
Archiv - Navigation
1468to1472
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-File - Makro macht aus Wert nicht 0.00

CSV-File - Makro macht aus Wert nicht 0.00
11.01.2016 11:48:53
Beat
Lieber Herbers-Excel Freunde
Ich hänge hier an einer Problemstellung fest, für die ihr wohl das Wort Problem nicht mal annähernd in Betracht ziehen würdet ;-).
Ausgangslage:
Ich habe eine Excel-Datei, in welcher weltweit (CH, DE, USA, Asien usw.) Daten erfasst und danach in ein Tool mittels CSV-File geladen werden sollen. Die Daten werden in der 'Upload-Tabelle' (Siehe Beilage https://www.herber.de/bbs/user/102717.xlsm ) zuerst aufgelistet in den Spalten A-O, danach gefiltert nach den Kriterien der Spalten R-S in den Spalten U-AG für den Upload aufgelistet. Das Makro erstellt nun eine Kopie dieser Tabelle, fixiert die Werte und löscht die Spalten A-T raus, bevor der Rest als CSV-File abgespeichert wird.
Problem:
Das Problem besteht darin, dass ich die Programmierung nicht hinkriege, dass die Werte unabhängig der Grundeinstellungen der jeweiligen Länder in Office mit Punkt und 2 Dezimalstellen im CSV-File stehen. In DE und Asien z.B. gilt das Komma als Dezimaltrenner.
Im Makro versuche ich dies wie folgt zu lösen:
If CurrCell.Column = 12 Then
CurrTextStr = CurrTextStr & Format(CurrCell.Value, "#####################0.00") & ListSep
Das haut aber leider in Deutschland und Asien nicht hin: da habe ich nach wie vor ein Komma im Uploadfile. Wenn die Länder ihre XLS-Grundeinstellungen ändern, dann geht's - dann habe sie aber bei allen anderen Files Probleme, welche sie im 'Landesformat' bearbeiten/laden müssen.
Ich denke, ich kann mit meiner Einstellung die Grundeinstellungen nicht ausbooten.
Hat evtl. jemand eine Idee? Jetzt schon herzlichen Dank an alle, die Zeit aufwenden, um mir zu helfen !!!
Hier nochmals der Link zur Anlage: https://www.herber.de/bbs/user/102717.xlsm
Hier das gesamte Makro:
Sub CSVACTIC()
' CSVACTIC Makro
' Filter ausführen, CSV-File erstellen für Tabelle "Upload_ACT_&IC"
' leeren Zielbereich Filter
Sheets("Upload_ACT_&IC").Select
Range("U1:AG1").Select
Selection.Copy
Range("AI1").Select
ActiveSheet.Paste
Columns("AI:AU").Select
Application.CutCopyMode = False
Selection.Cut
Columns("U:AG").Select
ActiveSheet.Paste
Range("N1").Select
' Filter ausführen
Range("A:M").AdvancedFilter Action:=xlFilterCopy, CriteriaRange _
:=Range("R1:S2"), CopyToRange:=Range("U1:AG1"), Unique:=False
' CSV-File erstellen
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("Upload_ACT_&IC")
.Range("A7").Calculate
FName = "Upload_ACT_&IC_" & .Range("Q10").Text & "_PL_" & .Range("Q7").Text & .Range(" _
Q5").Text & "_" & Format(.Range("Q13"), "yyyymmdd") & "-" & Format(.Range("Q13"), "hhmm") & ".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("Upload_ACT_&IC") 'Name ggf. anpassen
'Blatt in temproräres Blatt kopieren
wks.Copy after:=wks
Set wks = ActiveSheet
wks.Name = "Upload_ACT_&IC_c" & 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:T").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
' Erstellen Zeilen mit ListSeparator (;) und Definition  Spalte mit Value (hier =12),  _
Formatierung mit Zahl 2 Kommastellen
If CurrCell.Column = 12 Then
CurrTextStr = CurrTextStr & Format(CurrCell.Value, "#####################0.00")  _
& ListSep
Else
CurrTextStr = CurrTextStr & CurrCell.Value & ListSep
End If
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
' zurück an den Ursprungsort
Sheets("Upload-Cockpit").Select
Range("E25").Select
End Sub

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV-File - Makro macht aus Wert nicht 0.00
11.01.2016 13:07:57
ChrisL
Hi Beat
Mit Application.International(xlDecimalSeparator) bekommst du die Systemeinstellung. Vorausgesetzt du hast keine zusätzlichen Tausender-Trennzeichen, dann sollte folgender Ansatz funktionieren:
strZahl = Replace(strZahl, ".", Application.International(xlDecimalSeparator))
cu
Chris

AW: CSV-File - Makro macht aus Wert nicht 0.00
11.01.2016 13:35:32
Beat
Hallo Chris
Herzlichen Dank für deinen Input. Sorry, jetzt die DAU-Frage: wohin mach' ich deinen Input? Ersetze ich damit meine Zeile
CurrTextStr = CurrTextStr & Format(CurrCell.Value, "#####################0.00") _
& ListSep
Viele Grüsse
Beat

Anzeige
AW: CSV-File - Makro macht aus Wert nicht 0.00
11.01.2016 14:12:23
ChrisL
Hi Beat
Ich kann es mit meinen Ländereinstellungen nicht testen, aber versuch mal...
If CurrCell.Column = 12 Then
CurrTextStr = CurrTextStr & Replace(CStr(Format(CurrCell.Value, "###0.00")), Application.International(xlDecimalSeparator), ".") & ListSep
Else
CurrTextStr = CurrTextStr & CurrCell.Value & ListSep
End If
cu
Chris

AW: CSV-File - Makro macht aus Wert nicht 0.00
11.01.2016 14:35:47
Beat
Hallo Chris
Vielen Dank. Ich habe es eingebaut und mit Deutschland testen können. DE sieht im XLS einen Punkt, im CSV-File steht dann aber leider immer noch das Komma. Asien ist bereits zu Hause ;-). Die sehen bereits im XLS ein Komma. Bin dann gespannt, was die im CSV-File haben.
Viele Grüsse
Beat

Anzeige
AW: CSV-File - Makro macht aus Wert nicht 0.00
11.01.2016 15:48:14
ChrisL
Hi Beat
Ich habe mir jetzt die Mühe gemacht, die Ländereinstellungen anzupassen mit Komma als Dezimaltrennzeichen. In Excel erfolgt die Anzeige der Spalte L nun mit Komma, wenn ich das Makro mit entsprechender Anpassung laufen lasse, wird mir aber dennoch ein Punkt ausgegeben. Läuft somit auf meinem Rechner.
Vielleicht habe ich etwas übersehen, lasse die Frage daher offen.
cu
Chris

AW: CSV-File - Makro macht aus Wert nicht 0.00
11.01.2016 15:58:27
Beat
Hallo Chris
Vielen Dank für deinen Test. Ich versuche es auch noch einmal - evtl. habe ich ja was übersehen.
Viele Grüsse
Beat

AW: CSV-File - Makro macht aus Wert nicht 0.00
12.01.2016 11:37:27
Beat
... ich habe heraus gefunden, dass bei mir (wie auch in DE) die Einstellung in der Systemsteuerung/Region und Sprache massgebend ist, wie der Wert im Uploadfile dargestellt wird. Dabei wird meine Formatierung im Makro sowie auch die Einstellungen in den XLS-Optionen (Sprache/erweitert) ignoriert.
Es bleibt mir wohl nichts anderes übrig, als herauszufinden, wie ich mittels Makro diese Einstellungen (Systemsteuerung) herausfinden, dann auf Deutsch(Schweiz) ändern und am Schluss wieder auf die ursprüngliche Einstellung zurück stellen kann.
Mal schauen, ob das Besserung bringt ;-)
Viele Grüsse
Beat

Anzeige
AW: CSV-File - Makro macht aus Wert nicht 0.00
12.01.2016 16:45:44
Beat
Hallo Chris,
ich bin da nicht mehr weiter gekommen und habe einen alternativen Ansatz gefunden. Ich nehme den als Zahl definierten Wert und schreibe ihn als Text in eine Zelle nebenan, mit der Formel, die ein Punkt setzt.
ABRUNDEN(O2;0)&"."&RECHTS(ABRUNDEN(O2*100;0);2)
So spielen die Einstellungen beim Upload keine Rolle mehr, da er nimmt, mit was ich ihn füttere ;-)
Vielen Dank aber für deine Hilfe !
Gruss Beat

AW: CSV-File - Makro macht aus Wert nicht 0.00
12.01.2016 17:03:37
Daniel
Hi
das Problem sollte sich so lösen lassen:
schreibe die Werte in eine Exceltabelle (am besten in eine neue Datei)
stelle das Zahlenformat auf 2 NK-Stellten ein.
speichere die Datei per Makro mit SAVEAS und FileFormat:=xlcsv
wenn du das SpeichernUnter per Makro ausführst (SaveAs) und eine CSV erstellts wird VBA immer die Internationalen Einstellungen (Komma als Trenner, Punkt als Dezimalzeichen) verwenden.
(um die landestypischen Einstellungen zu verwenden, musst du den Zusatz: Local:=True bei SaveAs verwenden.
ausserdem speichert Excel die Daten beim Erstellen einer CSV in dem Format, in welchem sie auf dem Blatt angezeigt werden (entsprechend dem Zellformat)
beim Öffnen der Datei müssen, Länder die sich nicht an den Internationalen Standard halten (so wie wir), die Datei entweder über ein Makro öffnen (dieses wendet auch beim Öffen den internationalen Standard an, wenn nicht Local:=true gesetzt ist)
oder manuell über den Textimport-Assistenten, bei welchem man Trenn- und Dezimalzeichen individuell auswählen kann.
Gruß Daniel

Anzeige
AW: CSV-File - Makro macht aus Wert nicht 0.00
12.01.2016 17:16:51
Beat
Hallo Daniel
Vielen Dank für deinen Input. Genau das war die Knacknuss. Ich konnte nicht alle spezifischen Einstellungen der Länder berücksichtigen und habe jetzt einfach die Zahl als Text umformatiert mit einer Formel, welche als Trenner in jedem Fall ein Punkt setzt.
Viele Grüsse
Beat

AW: CSV-File - Makro macht aus Wert nicht 0.00
17.01.2016 10:54:48
Hajo_Zi
Hallo Beat,
ich konnte aus dem Beitrag nicht lesen was offen?

AW: CSV-File - Makro macht aus Wert nicht 0.00
18.01.2016 09:37:37
Beat
Hallo Hajo
Daniel konnte mir einen Hinweis geben - hat aber leider nicht funktioniert. Ich habe jetzt mittels Formel die Zahl in Text umformatiert. So funktioniert's.
Die Problematik ist, dass ich einen Wert in ein CSV-File bringen muss mit 2 Kommastellen und Punkt als Dezimaltrenner... und das in allen Ländern (mit ihren unterschiedlichen Einstellungen). Alle Versuchen liefen schief, da die Grundeinstellungen meine Einstellungen im Makro übersteuert haben.
Vielen Dank für deine Nachfrage - ich glaubte, den Thread geschlossen zu haben.
Gruss und einen schönen Tag
Beat
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige