Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1044to1048
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-Datei öffnen Daten schreiben!?
27.01.2009 14:57:00
Tobsen
Hallo
Habe in einer Function folgendes:
Open "C:\test\werte.csv" For Append As #1
...
In der Datei werden einmal am Tag Werte geschrieben. In der ersten Zeile sollen Datum, Erklärung Wert1,...
usw. stehen. Dann ab der zweiten Zeile die Werte.
Um die Werte in die Datei zu schreiben, rufe ich immer diese Funktion auf. Aber nur beim ersten Öffen/Erstellen der Datei, sollen Datum und die Erklärungen eingetragen werden.
Bei mir schreibt er jedesmal die Zeile mit Datum usw. wieder neu. Gibt es da eine Funktion wie ich das hinbekomme?
Soll so aussehen
Datum Wert1 Wert2 ....
23.1.09 2 4
24.1.09 5 6

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV-Datei öffnen Daten schreiben!?
27.01.2009 16:37:21
fcs
Hallo Tobsen,
dann muss du die Legende und Spaltentitel in einem separaten Array übergeben.
in der Routine wird dann geprüft, ob die Datei schon vorhanden ist. Falls nein, dann wird die Lengende an den Anfang der Datei geschrieben.
Hier mal meine bisherigen Beispiel-makros entsprechend angepasst.
Gruß
Franz

Function schreibe_VT(Verz, Datei, strwert As Variant, Optional strLegende As Variant) As  _
Boolean
Dim Datum As String, Vortag As Variant, intI As Integer, test As Long
Dim daten As String
On Error GoTo Fehler
Datum = Format(Date, "yyyy/mm") '---> 2006.01
Datum = Format(Date, "yyyy_mm") 'meine Empfehlung '---> 2006_01
Vortag = DateAdd("d", -1, Date)
'Prüfen ob Datei schon vorhanden
If Dir(Verz & Datei & "_" & Datum & ".csv") = "" Then
'Legende in Datei Schreiben
Open Verz & Datei & "_" & Datum & ".csv" For Append Shared As #1
If IsArray(strLegende) Then
For intI = LBound(strLegende) To UBound(strLegende)
Print #1, strLegende(intI)
Next
Else
If strLegende  "" Then
Print #1, strLegende
End If
End If
Close #1
End If
daten = (Vortag)
For intI = LBound(strwert) To UBound(strwert)
If IsNumeric(strwert(intI)) Then
'    test = CInt(strwert(intI)) 'CInt kann nur Zahlen bis ca. 32000 verarbeiten
test = CLng(strwert(intI))
daten = daten & ";" & (test)
Else
'    daten = daten & ";" & strwert(intI) 'nur zum Testen
daten = daten & ";" 'Bei nicht nummerischen Werten
End If
Next
Open Verz & Datei & "_" & Datum & ".csv" For Append Shared As #1
Print #1, daten
Close #1
schreibe_VT = True
Fehler:
With Err
If .Number  0 Then
schreibe_VT = False
MsgBox "Fehler-Nr. " & .Number & vbLf & .Description
End If
End With
End Function
Private Sub CommandButton5_click()
Dim erg As Boolean, Var1, Var2, Var3, strText(0 To 4) As String
'Arrayvariable mit Daten zum Legenden Text und Spaltentiteln füllen
strText(0) = "Daten XYZ"
strText(1) = "Wert 1: Temperatur °C KW-VL Kollonne ABC01-BT001 - Messstelle ABC01-CT001"
strText(2) = "Wert 2: Temperatur °C KW-RL Kollonne ABC01-BT001 - Messstelle ABC01-CT002"
strText(3) = "Wert 3: Druck kPa Kollonne ABC01-BT001 - Messstelle ABC01-CP001"
strText(4) = "Datum" & ";" & "Wert 1" & ";" & "Wert 2" & ";" & "Wert 3"
'hier sollen alle datenpunkte eingetragen werden, _
in der funktion sollen diese nicht geändert werden müssen!?'
'oder so - Variablen-Werte
Var1 = "22,2"
Var2 = "28,7"
Var3 = "20,5"
erg = schreibe_VT("c:\lokale daten\test\", "Anlage", Array(Var1, Var2, Var3), strText)
If erg = True Then
MsgBox "Daten erfolgreich in Datei geschrieben", vbOKOnly, "Test schreibe_VT"
Else
MsgBox "Fehler beim Schreiben der Daten in Datei", vbOKOnly, "Test schreibe_VT"
End If
End Sub


Anzeige
AW: CSV-Datei öffnen Daten schreiben!?
28.01.2009 10:00:53
Tobsen
Hallo und danke für eure Hilfe
Meine Code sieht folgendermaßen aus:

Private Sub CommandButton5_click()
erg = schreibe_VT("c:\test\", "Anlage", "Fix32.Fix.Sinus.f_cv", "Fix32.Fix.Sinus.f_cv", "Fix32. _
Fix.Sinus.f_cv")
End Sub


Function schreibe_VT(Verz, Datei, DP1 As String, DP2 As String, DP3 As String) As Integer
On Error Resume Next
MkDir (Verz)
Datum = Format(Date, "yyyy/mm")
Vortag = DateAdd("d", -1, Date)
Dim intI As Integer
Dim test As Integer
Dim Wert1, Wert2, Wert3 As Integer
If Dir(Verz & Datei & "_" & Datum & "csv") = " " Then
Open Verz & Datei & "_" & Datum & ".csv" For Append Shared As #1
Print #1, "Datum; Sinus; Register"
Close #1
End If
Wert1 = readValue(DP1)
Wert2 = readValue(DP2)
Wert3 = readValue(DP3)
daten = (Vortag) & ";" & (Round(Wert1, 2)) & ";" & (Round(Wert2, 2)) & ";" & (Wert3)
Open Verz & Datei & "_" & Datum & ".csv" For Append Shared As #1
Print #1, daten
Close #1
End Sub


Beim überprüfen ob die Datei vorhanden ist, hab ich noch ein Problem. So wie es oben dargestellt schreibt er "Datum,Sinus,Register" nicht in die Datei. Mache ich aus dem = " ", ein "", dann schreibt er "Datum, Sinus, Register" jedesmal rein. Bin glaube zu blöd den Fehler zu finden. Ist doch so wie ihr geschrieben habt?!

Anzeige
AW: CSV-Datei öffnen Daten schreiben!?
28.01.2009 11:02:00
fcs
Hallo Tobsen,
da ist Dir noch ein Leerzeichen zuviel reingerutscht.

If Dir(Verz & Datei & "_" & Datum & "csv") = " " Then
korrekt:
If Dir(Verz & Datei & "_" & Datum & "csv") = "" Then


Gruß
Franz

AW: CSV-Datei öffnen Daten schreiben!?
28.01.2009 11:16:24
Tobsen
Versteh das nicht, der schreibt trotzdem jedesmal die Zeile mit "Datum,Sinus,Register" rein.
AW: CSV-Datei öffnen Daten schreiben!?
28.01.2009 11:18:51
Tobsen
Der erkennt nicht, dass die Datei unter dem Verzeichnis vorhanden ist...
Gruß tobsen
AW: CSV-Datei öffnen Daten schreiben!?
28.01.2009 12:17:05
fcs
Hallo Tobsen,
das Ur-Problem ist dann diese Zeile

Datum = Format(Date, "yyyy/mm")


Diese Erzeugt einen Text etwa: "2009.01"
An diesem Punkt im Dateinamen scheitert dann der Dir-Befehl. Dieser erwartet nach dem Punkt die Erweiterung des Dateinamens.
Deshalb in einem früheren Thread meine Empfehlung:


Datum = Format(Date, "yyyy_mm")


Damit kommt Dir dann klar.
Gruß
Franz

Anzeige
AW: CSV-Datei öffnen Daten schreiben!?
28.01.2009 13:19:04
Tobson
Hey Franz
Vielen Dank für deine Hilfe und Geduld. Es funktioniert jetzt, hatte auch noch nen anderen kleinen Fehler drin. Hätte noch eine Frage... wei kann ich aus z.b. "Fix32.Fix.Sinus.f_cv" die Bezeichnung Sinus auslesen? Für Sinus könnten auch andere längere oder kürzere Wörter stehen.?
Vielleicht kannst du mir nochmal helfen.
Gruß Tobsen
AW: CSV-Datei öffnen Daten schreiben!?
28.01.2009 16:08:00
fcs
Hallo Tobson,
geht zum Beispiel mit einer benutzerdefinierten Funktion, die den Text zwischen dem 2. und 3. Punkt herausschneidet.
Gruß
Franz

Sub Test()
Dim strVar As String
Dim TeilString As String
strVar = "Fix32.Fix.Sinus.f_cv"
'Teilstring nach 2. Punkt ermitteln
TeilString = TeilText(strText:=strVar, strZeichen:=".", Nummer:=2)
'TestZeile
MsgBox strVar & vbLf & TeilString
End Sub
Function TeilText(strText As String, strZeichen As String, Nummer As Long) As String
Dim intI As Long, Pos1 As Long, Pos2 As Long
'Bestimmung des Teiltextes von der x. bis zur x+1. Wiederholung eines Strings _
innerhalb eines Textes
'strText = zu durchsuchender Text
'strZeichen = String dessen Position gesucht werden soll
'Nummer = X. Wiederholung des Strings ab dessen Position Teiltext zurückgegeben werden soll
'Position der X. Wiederholung von strZeichen
If Len(strText) - Len(VBA.Replace(strText, strZeichen, "")) >= Nummer * Len(strZeichen) Then
Pos2 = 1 'Startposition für Suche von strZeichen
For intI = 1 To Nummer
Pos1 = InStr(Pos2, strText, strZeichen)
Pos2 = Pos1 + Len(strZeichen)
Next
Else
Pos1 = 0
End If
If Pos1 > 0 Then
'Position des X+1. Wiederholung von strZeichen
Pos2 = InStr(Pos1 + Len(strZeichen), strText, strZeichen)
If Pos2 > 0 Then
'Text zwischen X. und X+1. Wiederholung von strZeichen
TeilText = Mid(strText, Pos1 + Len(strZeichen), Pos2 - (Pos1 + Len(strZeichen)))
Else
'Text ab X. Wiederholung von strZeichen bis Ende Text
TeilText = Mid(strText, Pos1 + Len(strZeichen))
End If
Else
'Weniger als X Wiederholungen von strZeichen im Text
TeilText = strText
End If
End Function


Anzeige
AW: CSV-Datei öffnen Daten schreiben!?
27.01.2009 16:37:00
Ramses
Hallo
Zeig doch mal den ganzen Code den du verwendest
Gruss Rainer
AW: CSV-Datei öffnen Daten schreiben!?
27.01.2009 16:38:00
Tino
Hallo,
lass die erste Zeile beim zweiten mal einfach weg.
Prüfe ob die Datei vorhanden ist und entsprechend machst Du es mit bzw. ohne Überschrift.
Beispiel:
If Dir$("C:\test\werte.csv", vbDirectory) "" Then
'Datei vorhanden
Else
'Datei nicht vorhanden
End If
Gruß Tino

172 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige