Anzeige
Archiv - Navigation
1040to1044
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
feste Funktion mit sich ändernden Werten
26.01.2009 10:29:00
Tobsen
Hallo habe folgendes Problem.
Möchte Tageswerte eines Programms in eine csv-Datei schreiben. Das solle folgendermaßen aussehen:
SchreibTag("DatenpunktWert1","DatenpunktWert2") --> Funktionsaufruf!
Funktion: Die Funktion soll Global sein, heißt die soll nicht mehr geändert werden. Die Datenpunkte werden hier in Integer gewandelt und in eine datei geschrieben.
Wie kann ich in meiner Funktion die Datenpunkte aufrufen ohne diese direkt anzusprechen. Die Datenpunkte ändern sich von Projekt zu Projekt, deshalb sollten sie nur einmal im Funktionsaufruf eingetragen werden und in der eigentlichen Funktion sollte mit Variablen o.ä. gearbeitet werden. Eben so, dass ich die ganzen Datenpunkte nicht in der Funktion auch jedesmal ändern muss.
Hoffe man konnte verstehen worauf ich hinaus will. Meine VBA Kenntnisse sind nocht nicht all zu tief.
Dank und Gruß
Tobsen

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: feste Funktion mit sich ändernden Werten
26.01.2009 12:25:00
fcs
Hallo Tobsen,
vom Grundprinzip schaut ein Funktionsaufruf mit Parametern wie folgt aus.
Hier im Beispiel werden die Inhalte (Texteigenschaft) zweier Zellen an die Funktion übergeben.
Gruß
Franz

Sub Test()
Call SchreibTag(strDatenpunktWert1:=Cells(1, 2).Text, strDatenpunktWert2:=Cells(1, 3).Text)
End Sub
Public Sub SchreibTag(strDatenpunktWert1 As String, strDatenpunktWert2 As String)
Dim lngDP1 As Long, lngDP2 As Long
Const strDatei As String = "C:\Lokale Daten\Test\Daten\Test001.csv"
If IsNumeric(strDatenpunktWert1) Then lngDP1 = CLng(strDatenpunktWert1) Else lngDP1 = 0
If IsNumeric(strDatenpunktWert2) Then lngDP2 = CLng(strDatenpunktWert2) Else lngDP2 = 0
Open strDatei For Append As #1
'Werte + aktuelle Datum am Ende der CSV-Datei anfügen
Print #1, lngDP1 & "," & lngDP2 & "," & Format(Date, "YYYY-MM-DD")
Close #1
End Sub


Anzeige
AW: feste Funktion mit sich ändernden Werten
26.01.2009 13:06:00
Tobsen
Hallo Franz, danke fü deine Hilfe
Habe folgendes (unvollstänfig)
Function schreibe_VT(Verz, Datei, strwert As String) As Integer
Datum = Format(Date, "yyyy/mm")
Vortag = DateAdd("d", -1, Date)
Open Verz & Datei & "_" & Datum & ".csv" For Append Shared As #1
test = CInt(strwert) 'hier sagt der compiler: typen unverträglich?'
daten = (Vortag) & ";" & (test)&";"...
Print #1, daten
Close #1
End Function



Private Sub CommandButton5_click()
erg = schreibe_VT("c:\test\", "Anlage", "Fix32.Fix.Sinus.f_cv",...)  'hier sollen alle  _
datenpunkte eingetragen werden, in der funktion sollen diese nicht geändert werden müssen!?'
End Sub


Anzeige
AW: feste Funktion mit sich ändernden Werten
26.01.2009 18:16:00
fcs
Hallo Tobsen,
die Funktion CInt wandelt einen als Text vorliegenden Zahlen-Ausdruck in eine Integer-Zahl um. Ist der Text nicht nummerisch, dann gibt es einen Typ-Fehler. deshalb ist dringend eine Fehlerbehandlung/Wertpürfung angeraten.
Wenn du mehrere Werte an die Funktion übergeben willst, dann muss du diese in einem Array übergeben. In einer Schleife müssen diese Werte dann für die Datenzeile in der CSV-Datei zusammengebaut werden.
Gruß
Franz

Function schreibe_VT(Verz, Datei, strwert 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)
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
'hier sollen alle datenpunkte eingetragen werden, _
in der funktion sollen diese nicht geändert werden müssen!?'
'so - feste Werte
erg = schreibe_VT("c:\test\", "Anlage", Array("105", "203.4", "26"))
'oder so - Zelladdressen
erg = schreibe_VT("c:\test\", "Anlage", Array(Cells(3, 1), Cells(3, 2), _
Cells(3, 3)))
'oder so - Range-Addressen
erg = schreibe_VT("c:\test\", "Anlage", Array(Range("A3"), Range("B3"), _
Range("C3")))
'oder so - Variablen-Werte
Var1 = "123.2"
Var2 = "007"
Var3 = "0.234"
erg = schreibe_VT("c:\test\", "Anlage", Array(Var1, Var2, Var3))
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: feste Funktion mit sich ändernden Werten
27.01.2009 11:27:00
Tobsen
Danke Franz, das bringt mich doch schon weiter.
Meine Datenpunkte sehen folgendermaßen aus: Fix32.Fix.Sinus.f_cv und so weiter. Die kommen von einem Prozessleitsystem in deren Hintergund man Makros programmieren kann. Kann ich denn in den Array diese Datenpunkte legen? Die Werte des jeweiligen DP's ändern sich ja jeden Tag. Und die Werte kommen vom Leitsystem, also ich kann die nicht anfassen/ändern sondern die werden in besagten DP geschrieben. So wie ich es verstanden habe, muss ich dem Arry aber richtige Werte von Hand vorgeben?!
Danke nochmals und Gruß
Tobsen
AW: feste Funktion mit sich ändernden Werten
27.01.2009 12:15:00
fcs
Hallo Tobsen,
der Ausdruck "Fix32.Fix.Sinus.f_cv" muss ja eine Variable oder ein Objekt sein, hinter dem sich ein Wert oder ggf. auch ein Array von Werten verbirgt.
Wenn es Variablen sind, dann kann man sie direkt im Array verwenden, siehe mein Beispiel mit Variablen.
Wenn es ein Objekte ist, dann muss man diesem noch die Wert-Eigenschaft(en) entlocken.
Im einfachsten Fall wäre das die Value-Eigenschaft, wie in Cells(1, 2).Value.
Irgendwo in der Doku zu deinem PLS müssten sich auch Informationen zur Daten-Struktur dieser Objekte finden, u.a. unter welcher Eigenschaft die Daten abgelegt sind.
Gruß
Franz
Anzeige
AW: feste Funktion mit sich ändernden Werten
27.01.2009 12:27:21
Tobsen
Hallo Franz
der Ausdruck "Fix32.Fix.Sinus.f_cv" ist ein Datenpunkt in dem ein Wert geschrieben wird. Meinetwegen siehst du auf dem Leitsystem die Anzeige "Durchfluss Vortag ####m³". Dann ist unter #### der Datenpunkt gelegt der seinen Wert von einer SPS bekommt.
Vielen Dank für deine ganzen Mühen, komme jetzt weiter.
Tobsen

174 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige