Uhrzeit bei csv export und Umbruch

07/03/2008 - 23:01 von Michael Feske | Report spam
Hallo alle zusammen,
Thomas hat mir mal mit diesem super script weitergeholfen (an dieser stelle
nochmal danke!)
Sub SaveCSV_a()
Dim a As Variant
Dim b() As String
Dim D() As String
Dim Z As Long
Dim S As Byte
Dim R As Long
Dim C As Byte

'Speicherpfad eintragen
Const Path As String = "G:\Documents\"
'Dateiname eintragen
Const filename As String = "Export_nach_OL2003"
'Dateiendung anpassen (.txt, .csv oder andere)
Const Extension As String = ".csv"
'Trennzeichen anpassen (Semikolon ";", Komma "," oder andere vbTab ohne
anführung für Tabulator)
Const Separator As String = ","
'Texerkennungszeichen anpassen (kann meist so bleiben)
Const Wrapper As String = """"



'Zu speichernden Bereich eintragen z.B:
'Worksheet("DeinTabellenblatt").UsedRange
'Worksheet("DeinTabellenblatt").Range("A1:B10")

a = ActiveSheet.UsedRange

If Not IsEmpty(a) Then
Z = UBound(a, 1)
S = UBound(a, 2)
ReDim b(S - 1)
ReDim D(Z - 1)
For R = 1 To Z
For C = 1 To S
If InStr(1, a(R, C), Separator) > 0 Then
'Rows whith cells including the Separator
'put in Wrapper
b(C - 1) = Wrapper & a(R, C) & Wrapper
Else
b(C - 1) = a(R, C)
End If
Next C
D(R - 1) = Join(b(), Separator)
Next R
Open Path & filename & Extension For Output As #1
Print #1, Join(D(), vbCrLf)
Close #1
End If
End Sub

Der Hintergrund ist, das ich eine csv Datei benötige, welche Komma als
Trennzeichen enthàlt.

Jetzt habe ich dieses Makro in eine andere Tabelle übertragen und habe ein
Problem. In den Spalten C,E und I sind Uhrzeiten im Format hh:mm:ss
enthalten. Diese werden beim export mit dem Makro leider als 0,5625 für
13:30:00 exportiert. Wie kann ich das àndern ? Wenn ich es mit speichern
unter csv exportiere stimmt der wert (aber halt das Trennzeichen nicht)

Wie müßte die Funktion lauten um von C2 13:30:00 eine halbe Stunde
abzuziehen, so das in I2 13:00:00 Uhr steht ?

Gibt es die Möglichkeit in Excel in zwei zeilen in einer zelle zu schreiben
und diesen Zeilenumbruch auch nach csv zu exportieren ?


Gruß
Micha
 

Lesen sie die antworten

#1 Peter Schleif
08/03/2008 - 08:22 | Warnen spam
Michael Feske schrieb am 07.03.2008 23:01:

In den Spalten C,E und I sind Uhrzeiten im Format hh:mm:ss
enthalten. Diese werden beim export mit dem Makro leider als 0,5625 für
13:30:00 exportiert. Wie kann ich das àndern



Du könntest die Eigenschaft .Text einer Zelle benutzen. Diese enthàlt
den *formatierten* Inhalt der Zelle - also das was Du auch auf deinem
Tabelleblatt siehst. Leider ist diese Eigenschaft in deinem Code so
einfach nicht mehr abrufbar.

Außerdem fehlt IMHO die Möglichkeit Zeichen zu maskieren. Dies könnte
nötig werden, wenn das Wrapper-Zeichen (") selbst in einer Zelle
auftaucht. Ich habe mal meine Version unten angefügt, die alle
Änderungen berücksichtigt, aber die Bezeichner des Originals
beibehàlt, damit Du dich möglichst schnell zurecht findest.


Wie müßte die Funktion lauten um von C2 13:30:00 eine halbe Stunde
abzuziehen, so das in I2 13:00:00 Uhr steht ?



I2 Â-ZEITWERT("00:30:00")


Gibt es die Möglichkeit in Excel in zwei zeilen in einer zelle zu schreiben
und diesen Zeilenumbruch auch nach csv zu exportieren ?



Ja. Du musst ein Zeichen festlegen, das in der *.csv-Datei den
Zeilenumbruch ersetzt. Üblicherweise nimmt man dafür . Das nutzt
natürlich nur etwas, wenn dieses Zeichen beim Wiedereinlesen auch
entsprechend interpretiert wird.

Peter


Sub SaveCSV()
Dim fso As Object
Dim fp As Object
Dim z As Integer
Dim s As Integer
Dim str As String
Dim text As String

Const Path As String = "C:\"
Const filename As String = "Export_nach_OL2003"
Const Extension As String = ".csv"
Const Separator As String = ","
Const Wrapper As String = """"
Const Maskierer As String = "\"
Const Umbruch As String = ""

Set fso = CreateObject("Scripting.FileSystemObject")
Set fp = fso.CreateTextFile(Path & filename & Extension, True)

For z = 1 To Cells.SpecialCells(xlCellTypeLastCell).Row
str = ""
For s = 1 To Cells.SpecialCells(xlCellTypeLastCell).Column
text = Replace(Cells(z, s).text, Chr(10), Umbruch)
text = Replace(text, Wrapper, Maskierer & Wrapper)
str = str & IIf(s > 1, Separator, "")

If InStr(1, text, Separator) > 0 Then
str = str & Wrapper & text & Wrapper
Else
str = str & text
End If
Next
fp.WriteLine str
Next

fp.Close

Set fp = Nothing
Set fso = Nothing

End Sub

Ähnliche fragen