Supportnet / Forum / Datenbanken
Textfeld in Datum wandeln
Frage
Hallo, ich habe da ein Problem, bei dem ich alleine nicht weiter komme: in einer Access2000-DB habe ich in einem Formular ein Kombifeld mit hinterlegter Wertliste für den Monat. In einem weiteren Kombifeld hinterliegt ebenfalls eine Wertliste mit dem Jahr.
Nun soll ich ein Diagramm erstellen, welches als Basis die Monate des Jahres in der x-Achse und eine Anzahl von Stunden auf der y-Achse darstellen soll.
In einer Function wird in ein Textfeld die Auswahl der beiden Kombifelder geschrieben (--> Januar_2006). Leider kann ich mit diesem Textfeld keine Periode im Diagramm darstellen, so dass ich es umwandeln möchte in ein wirkliches Datumsfeld (--> 01.2006), oder die Function erweitern, damit sie mein neues Datumsfeld füllt.
Leider weiß ich nicht, wie ich es anstellen soll.
Weiß jemand einen Rat?
Ich hatte schon den Tipp bekommen, es mit ´ListIndex+1´ zu probieren. In einer MsgBox gelingt es mir auch, aber wie bekomme ich es dann in mein Datumsfeld???
Antwort 1 von Gudrun11
Guten Tag,
es gibt da eine Funktion für VBA
Dim MyDate As Date
MyDate = DateSerial(Jahr,Monat,Tag)
Ohne den Tag kenne ich auch kein Datumsformat bei Access.
Vielleicht hilft es ja weiter.
Gruß Gudrun
es gibt da eine Funktion für VBA
Dim MyDate As Date
MyDate = DateSerial(Jahr,Monat,Tag)
Ohne den Tag kenne ich auch kein Datumsformat bei Access.
Vielleicht hilft es ja weiter.
Gruß Gudrun
Antwort 2 von siena
Hallo Gudrun, vielen Dank für deine Antwort, doch leider ist es nicht das, was ich suche.
Hier die OH für DateSerial-Funktion:
Gibt einen Wert vom Typ Variant (Date) zurück, der die angegebene Jahres-, Monats- und Tageszahl enthält...
Mein Problem ist, dass ich den Monat ausgeschrieben habe. Ich kann also nicht die Teil-Function benutzen, weil der ausgeschrieben Monat unterschiedlich lang ist.
Trotzdem vielen Dank, dass Du drüber nachgedacht hast.
siena
Hier die OH für DateSerial-Funktion:
Gibt einen Wert vom Typ Variant (Date) zurück, der die angegebene Jahres-, Monats- und Tageszahl enthält...
Mein Problem ist, dass ich den Monat ausgeschrieben habe. Ich kann also nicht die Teil-Function benutzen, weil der ausgeschrieben Monat unterschiedlich lang ist.
Trotzdem vielen Dank, dass Du drüber nachgedacht hast.
siena
Antwort 3 von Teddy7
Man könnte eine eigene Funktion schreiben (im Modul als Public definieren). Darin könnte man mit instr die Position des _ ermitteln und dann den Text links davon abfragen (if.. oder case...)
dim xpos as integer
dim datum as string
xpos = instr(Übergabetext, "_")
if left(Übergabetext, xpos - 1) = "Januar" then
datum = "01.01." & right(Übergabetext,4)
elseif left(Übergabetext, xpos - 1) = "Februar" then
datum = "01.02." & right(Übergabetext,4)
elseif...........
Dieses Textfeld kann dann auch in ein Datumsfeld überführt werden.
Gruß
Teddy
dim xpos as integer
dim datum as string
xpos = instr(Übergabetext, "_")
if left(Übergabetext, xpos - 1) = "Januar" then
datum = "01.01." & right(Übergabetext,4)
elseif left(Übergabetext, xpos - 1) = "Februar" then
datum = "01.02." & right(Übergabetext,4)
elseif...........
Dieses Textfeld kann dann auch in ein Datumsfeld überführt werden.
Gruß
Teddy
Antwort 4 von siena
Hey Teddy, vielen Dank für Deinen Tipp. Ich glaube, das ist die Funktion, die ich suchte.
Ich werde sie gleich ausprobieren.
Vielen Dank nochmal
siena
Ich werde sie gleich ausprobieren.
Vielen Dank nochmal
siena
Antwort 5 von siena
Ich glaube, alles habe ich nicht verstanden: bei ´xpos-1´ bekomme ich eine Fehlermeldung: Laufzeitfehler 5: Ungültiger Prozeduraufruf oder ungültiges Argument.
Mein Code sieht so aus:
Wo ist der Fehler?
Mein Code sieht so aus:
Public Function DatumWandeln()
Dim xpos As Integer
Dim datum As String
Dim gblReportDate As String
xpos = InStr(gblReportDate, "_")
If Left(gblReportDate, xpos - 1) = "Januar" Then
datum = "01.01." & Right(gblReportDate, 4)
ElseIf Left(gblReportDate, xpos - 1) = "Februar" Then
datum = "01.02." & Right(gblReportDate, 4)
ElseIf Left(gblReportDate, xpos - 1) = "März" Then
datum = "01.03." & Right(gblReportDate, 4)
ElseIf Left(gblReportDate, xpos - 1) = "April" Then
datum = "01.04." & Right(gblReportDate, 4)
ElseIf Left(gblReportDate, xpos - 1) = "Mai" Then
datum = "01.05." & Right(gblReportDate, 4)
ElseIf Left(gblReportDate, xpos - 1) = "Juni" Then
datum = "01.06." & Right(gblReportDate, 4)
ElseIf Left(gblReportDate, xpos - 1) = "Juli" Then
datum = "01.07." & Right(gblReportDate, 4)
ElseIf Left(gblReportDate, xpos - 1) = "August" Then
datum = "01.08." & Right(gblReportDate, 4)
ElseIf Left(gblReportDate, xpos - 1) = "September" Then
datum = "01.09." & Right(gblReportDate, 4)
ElseIf Left(gblReportDate, xpos - 1) = "Oktober" Then
datum = "01.10." & Right(gblReportDate, 4)
ElseIf Left(gblReportDate, xpos - 1) = "November" Then
datum = "01.11." & Right(gblReportDate, 4)
ElseIf Left(gblReportDate, xpos - 1) = "Dezember" Then
datum = "01.12." & Right(gblReportDate, 4)
End If
End FunctionWo ist der Fehler?
Antwort 6 von Teddy7
Wo wird denn gblReportDate gefüllt ?
Ich nehme mal an, der Fehler entsteht weil der instr keinen Treffer hat.
Warum übergibst Du der Funktion nicht den String ?
Public Function DatumWandeln(Übergabe as string) as date
Dim xpos As Integer
Dim datum As String
xpos = 0
xpos = InStr(nz(Übergabe, ""), "_")
if xpos = 0 then
exit function
endif
If Left(Übergabe, xpos - 1) = "Januar" Then
.......usw....
und zum Schluss:
DatumWandeln = datum
(((Übrigens: man soll kein Feld einfach nur datum nennen, weil das ein reserviertes Wort ist)))
Aufrufen kannst Du die Function dann z.B. in einer Abfrage mit
DatumWandeln(altesdatum)
und bekommst ein Datumsfeld zurück.
Gruß
Teddy
Ich nehme mal an, der Fehler entsteht weil der instr keinen Treffer hat.
Warum übergibst Du der Funktion nicht den String ?
Public Function DatumWandeln(Übergabe as string) as date
Dim xpos As Integer
Dim datum As String
xpos = 0
xpos = InStr(nz(Übergabe, ""), "_")
if xpos = 0 then
exit function
endif
If Left(Übergabe, xpos - 1) = "Januar" Then
.......usw....
und zum Schluss:
DatumWandeln = datum
(((Übrigens: man soll kein Feld einfach nur datum nennen, weil das ein reserviertes Wort ist)))
Aufrufen kannst Du die Function dann z.B. in einer Abfrage mit
DatumWandeln(altesdatum)
und bekommst ein Datumsfeld zurück.
Gruß
Teddy
Antwort 7 von siena
Hey Teddy, tja, da verließen mich meine Geister!
gblReportDate wird in einer anderen Funktion gefüllt (natürlich ist auch diese DB ein Kunstwerk von dieversen anderen Künstlern, die nicht mehr hier sind..., wie sollte es anders sein?).
Das liest sich so gut, was du dort geschrieben hast, leider reichen meine Kenntnisse dafür nicht aus - aber ich werde es trotzdem mal versuchen.
Übrigens: das Wort ´datum´ habe ich aus deinem Code im Beitrag 3 genommen ;-))
Grüße
siena
gblReportDate wird in einer anderen Funktion gefüllt (natürlich ist auch diese DB ein Kunstwerk von dieversen anderen Künstlern, die nicht mehr hier sind..., wie sollte es anders sein?).
Public Sub setReportDate(smonth As String, syear As String) ´ÜbergabeParameter vom Dialog
If smonth = "" Or syear = "" Then
gblReportDate = ""
Else
gblReportDate = smonth & "_" & syear
End If
End SubDas liest sich so gut, was du dort geschrieben hast, leider reichen meine Kenntnisse dafür nicht aus - aber ich werde es trotzdem mal versuchen.
Übrigens: das Wort ´datum´ habe ich aus deinem Code im Beitrag 3 genommen ;-))
Grüße
siena
Antwort 8 von Teddy7
Dann ist gblReportDate bestimmt als Globale definiert. D.h. Du darfst diese Variable nicht nochmal in der Function definieren - das wäre dann nämlich ein anderes Feld. Nimm also nur mal diese Definition raus und probier´s nochmal.
Gruß
Teddy
Gruß
Teddy
Antwort 9 von siena
Moin Teddy,
ja, die gblReportDate ist eine globale Variable definiert.
Dann wird da wohl der Fehler liegen. Muß ich dann das Feld nehmen, in die die Variable eingetragen wird?
Gruß
siena
ja, die gblReportDate ist eine globale Variable definiert.
Dann wird da wohl der Fehler liegen. Muß ich dann das Feld nehmen, in die die Variable eingetragen wird?
Gruß
siena
Antwort 10 von Teddy7
Eine globale Variable steht immer zur Verfügung.
Du kannst Dich also in Deiner Funktion auf dieses Feld beziehen, ohne es (erneut) zu definieren.
Du kannst Dich also in Deiner Funktion auf dieses Feld beziehen, ohne es (erneut) zu definieren.

