PDA

Vollständige Version anzeigen : nächster Monat anzeigen


Broom
30.05.2012, 10:55
Hallo,
mit folgender Anweisung weise ich einem Feld die fortlaufende Nummer zu:
Me.lfnThema = txtThemaMax + 1

Wie kann ich auf diese Art den nächsten Monat ermitteln? z.B.:
Me.Neumonat = txtMonatalt + ... oder so?

Gruß
Heinrich

maikek
30.05.2012, 11:00
Moin,
Me.Neumonat = txtMonatalt + ... oder so?
ergibt im Dezember :p ?
Hast du ein Datumsfeld, mit dem du arbeiten kannst? Dann benutze die DateAdd-Funktion und formatiere das Feld, so dass es nur den Monat anzeigt.
maike

Broom
30.05.2012, 15:45
Hallo Maike,
in meinem Unterformular "ufrm_Fortschrittszahlen" gibt es das Feld "LMonat".
Wenn ich nun den Cursor in eine neue Zeile in dem Feld "LMonat" setze möchte ich das dort per Anweisung der nächstfolgende Monat von dem darüberliegenden Datensatz eingetragen wird. Folgende Anweisung habe ich mir dazu ausgedacht, jedoch funktiniert sie nicht.

Me.ufrm_Fortschrittszahlen.SetFocus
Me.LMonat = DateAdd("m", 1, [LMonat])

Wie müsste ich den Code anpassen?

Gruß
Heinrich

maikek
30.05.2012, 15:56
Den Wert des "darüberliegenden" Monats musst du dir direkt aus der Tabelle ermitteln, per DLookup- oder DMax-Funktion. Dafür brauchst du ein eindeutiges Kriterium (ID, letztes Datum etc.).
maike

Broom
30.05.2012, 16:33
Hallo Maike,
ich bin ja kein Profi und habe mir folgendes überlegt:
strgMon= DLookup("LMonat", "tb_Fortschritt") where JahrM = max
Me.LMonat = DateAdd("m", 1, [strgMon])

Das funktioniert natürlich nicht so aber könntest Du mir sagen wie es richtig wäre.
Gruß
Heinrich

Thomas Möller
30.05.2012, 16:47
Hallo Heinrich,

Das funktioniert natürlich nicht so aber könntest Du mir sagen wie es richtig wäre.

Welches Feld identifiziert denn den letzten Monat eindeutig?

CU

maikek
30.05.2012, 16:48
probiers mal so:
dim strgMon as long

<strike>strgMon= DLookup("LMonat", "tb_Fortschritt") where JahrM = max</strike>
strgMon = DLookup("LMonat", "tb_Fortschritt", "JahrM = max(JahrM))"

<strike>Me.LMonat = DateAdd("m", 1, [strgMon])</strike>
Me.LMonat = DateAdd("m", 1, clng(strgMon))

Von allen Datensätzen der Tabelle das höchste JahrM, was auch immer das sein mag? Auf eine bestimmte ID einschränken willst/musst du nicht?

maike

Broom
30.05.2012, 17:00
Hallo Thomas,
das Feld "JahrM" identifiziert den letzten Monat eindeutig. Es ist auch immer der höchste Wert.
Gruß
Heinrich

Broom
30.05.2012, 17:09
Hallo Maike,
den Satz:
strgMon = DLookup("LMonat", "tb_Fortschritt", "JahrM = max(JahrM))"
wird in rot angezeigt, also fehlerhaft.
Gruß
Heinrich

maikek
30.05.2012, 17:14
Kannst du den Code mal im Zusammenhang posten? Ist LMonat ein Feld in deiner Tabelle?
maike

maikek
30.05.2012, 17:24
Was mir dabei noch grad auffällt:
Hast du denn wirklich kein anständiges Datum in der Tabelle, mit dem man was anfangen könnte?
Ansonsten musst du wohl erst ein Datum basteln, bevor du einen Monat dazuaddieren kannst:
dim strgMon as long
dim dtGebastelt as Date
strgMon = DLookup("LMonat", "tb_Fortschritt", "JahrM = max(JahrM))"
dtGebastelt = Dateserial(2011, clng(strgMon), 1)
Me.LMonat = month(DateAdd("m", 1, dtGebastelt)
maike

Broom
30.05.2012, 18:55
Das Feld "JahrM" enthält das Jahr mit Monat, z.B. 201205.
Kann man damit etwas anfangen?

Gruß
Heinrich

Thomas Möller
30.05.2012, 18:56
Hallo Heinrich,

den Satz:
strgMon = DLookup("LMonat", "tb_Fortschritt", "JahrM = max(JahrM))"
wird in rot angezeigt, also fehlerhaft.

am Ende sind die Anführugszeichen und die Klammer vertauscht:

strgMon = DLookup("LMonat", "tb_Fortschritt", "JahrM = max(JahrM)")

CU

Broom
30.05.2012, 18:56
Das Feld "JahrM" gehört auch zur Tabelle.

Gruß
Heinrich

maikek
30.05.2012, 21:29
@Thomas
Upps, da hab' ich mich vertüdelt mit den Klammern, danke.

@Heinrich
Ist denn LMonat auch ein Feld in deiner Tabelle? Und wenn ja, Zahl oder Text?
Wenn nein, muss man halt zur Not das Feld JahrM zerlegen und mit DateSerial (wie im Beispiel oben) ein Datum draus machen ...

maike

Broom
31.05.2012, 08:52
strgMon = DLookup("LMonat", "tb_Fortschritt", "JahrM = max(JahrM)")
ergibt jetzt den Fehlerhinweis: Aggregatefunktion in Where-Klausel (JahrM=max(JahrM)) nicht möglich.
Das Feld ist in der Tabelle als Text angelegt.

Nach meheren Versuchen habe ich folgende Anweisung hinbekommen:
Dim strgMon As Long
Dim dtGebastelt As Date
strgMon = DMax("JahrM", "tb_Fortschrittszahlen")
dtGebastelt = DateSerial(Left([strgMon], 4), Mid([strgMon], 5, 2), 1)
Me.ufrm_Fortschrittszahlen.SetFocus
DoCmd.GoToRecord , , acNewRec
Me!ufrm_Fortschrittszahlen.SetFocus
Me!ufrm_Fortschrittszahlen!LMonat.SetFocus
Me.ufrm_Fortschrittszahlen!LMonat = Month(DateAdd("m", 1, dtGebastelt))

Das funktioniert soweit auch jetzt, allerdings wird der Monat als Zahl "7" und nicht als Bezeichnung "Juli" eingefügt. Was müsste ich da noch ändern?

Gruß
Heinrich

maikek
31.05.2012, 10:28
Moin Heinrich,
ist doch schon mal nicht schlecht, allerdings würde ich für die Zukunft immer ein echtes Datum verwenden, keinen Text.
Den Code habe ich etwas verändert (rot markierte Stellen):
Dim strgMon As String
Dim dtGebastelt As Date
strgMon = DMax("JahrM", "tb_Fortschrittszahlen")
dtGebastelt = DateSerial(Left(strgMon, 4), Mid(strgMon, 5, 2), 1)
Me.ufrm_Fortschrittszahlen.SetFocus
DoCmd.GoToRecord , , acNewRec
Me!ufrm_Fortschrittszahlen.SetFocus
Me!ufrm_Fortschrittszahlen!LMonat.SetFocus
Me.ufrm_Fortschrittszahlen!LMonat = Format(DateAdd("m", 1, dtGebastelt), "mmmm")
maike

Broom
31.05.2012, 16:34
Hallo Maike,
Danke für die Hilfe. Dies funktioniert sehr gut.
Ich habe auch noch eine Alternative gefunden:
Dim strgMon As Long
Dim dtGebastelt As Date
strgMon = DMax("JahrM", "tb_Fortschrittszahlen")
dtGebastelt = DateSerial(Left([strgMon], 4), Mid([strgMon], 5, 2), 1)
Me.ufrm_Fortschrittszahlen.SetFocus
DoCmd.GoToRecord , , acNewRec
Me!ufrm_Fortschrittszahlen!LMonat = MonthName(Month(DateAdd("m", 1, dtGebastelt)))

Nochmlas vielen Dank.
Gruß
Heinrich