Supportnet Computer
Planet of Tech

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

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

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

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

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:
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 Function


Wo 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

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?).

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 Sub


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

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

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

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.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: