Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
800to804
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
800to804
800to804
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zahlenformat beim CSV-abspeichern

Zahlenformat beim CSV-abspeichern
19.09.2006 12:51:16
Winfried
Hallo Freaks
Bei der Speicherung einer Excel-Datei als CSV tritt folgendes Problem auf :
- Wird die Speicherung "von Hand" durchgeführt ist alles richtig.
- Wird die Speicherung "per VBA" durchgeführt ist das Ergebnis im amerikanischen Format,
aus 125,56 wurde 125.56
Ich benötige eine Lösung , um mittels VBA eine CSV-Datei zu erzeugen ,
die bei Zahlen keine Tausenderpunkte und für Kommastellen ein KOMMA benutzt.
Vielen Dank im Voraus
Winfried

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahlenformat beim CSV-abspeichern
20.09.2006 08:59:41
bst
Morgen Winfried,
versuch's mal so.
HTH, Bernd
--
Option Explicit

Const RecordSeparator As String = vbCrLf
Const FieldSeparator As String = ";"
Const TextQualifier As String = """"

Const TranslateCRLF As Boolean = True

Sub TestWrite()
    Call CSVWrite(ActiveSheet.UsedRange, "e:\test\aus.csv")
End Sub

Public Sub CSVWrite(src As Range, fname As String)
    Dim handle As Integer ' Filehandle bzw. Dateinummer
    Dim i As Long ' Zähler über Zeilen
    Dim j As Integer ' Zähler über Spalten
    Dim arRow As Variant ' eine Zeile, für die Ausgabe zusammengebaut
    Dim sVal As String ' ein Zellenwert
    Dim maxcol As Integer ' max. Anzahl an Spalten
    
    handle = FreeFile
    maxcol = src.Columns.Count
    
    Redim arRow(1 To maxcol)
    Open fname For Output As #handle
    For i = 1 To src.Rows.Count
        For j = 1 To maxcol
            If IsError(src(i, j)) Then
                sVal = src(i, j).Text
            Else
                sVal = src(i, j).Value
            End If
            ' Falls Trennzeichen in der Zelle vorkommen, Spezialbehandlung
            If IsSeparatorInside(sVal) Then
                ' den Textkennzeichner verdoppeln und vorne und hinten anfügen
                sVal = TextQualifier & Replace(sVal, TextQualifier, TextQualifier & TextQualifier) & TextQualifier
                If TranslateCRLF Then sVal = Replace(sVal, vbLf, vbCrLf)
            End If
            arRow(j) = sVal
        Next j
        ' Zeile mit Trennzeichen ausgeben
        Print #handle, Join(arRow, FieldSeparator); RecordSeparator;
    Next i
    Close #handle
End Sub

Private Function IsSeparatorInside(s As String) As Boolean
    IsSeparatorInside = True
    
    ' Test auf das Feldtrennzeichen
    If InStr(s, FieldSeparator) Then Exit Function
    
    ' Test auf den Recordseparator
    If InStr(s, RecordSeparator) Then Exit Function
    
    ' Test auf vbCR und vbLF
    If InStr(s, vbCr) Then Exit Function
    If InStr(s, vbLf) Then Exit Function
    
    ' Test auf den Textkennzeichner
    If InStr(s, TextQualifier) Then Exit Function
    
    ' fertig, keine Sonderbehandlung notwendig
    IsSeparatorInside = False
End Function



Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige