Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Wievielter Tag des Jahres ermitteln

Begonnen von accessy, Oktober 26, 2012, 13:06:51

⏪ vorheriges - nächstes ⏩

accessy

In Excel ist die Ermittlung, der wievielte Tag des Jahres heute ist, kein Problem.

In Access habe ich dafür keine Formel gefunden.
Vielleicht geht das auch nur sehr umständlich. Keine Ahnung.

Also muss ich einen kleinen Umweg gehen.
Derzeit steht in der Textbox diese Formel:
=([Text27])/([Text28])*365
In Text30 steht das Datum für die Berechnung 22.10.2012.
Das wäre der 296. Tag des Jahres.
Das Datum ändert sich nur alle paar Wochen, wenn ich die Daten aktualisiere.

Im Moment muss ich von Hand die Tageszahl des Jahres (296) in die Textbox28 eingeben.
Schön wäre es, wenn ich das automatisch hätte, sobald ich das Datum in Text30 ändere.

Gibt es dafür eine Access Lösung, so wie in Excel?

daolix

evtl so
=[DeinDatum] - Dateserial(year([DeinDatum]), 1, 1) + 1

accessy

Ich habe die Textbox, in der das Datum steht
mit dem Eingabeformat "Datum lang" vorgegeben.

Somit ist schon mal klar, dass in der Textbox das Datum steht.

Zu einem Ergebnis in der Textbox, in der nun die Tageszahl des Jahres erscheinen soll
komme ich gar nicht erst, weil der Ausdruck "syntaktisch" falsch ist.

So steht es nun im Steuerelementeinhalt der Textbox28

=[Text30]-Dateserial(Year([Text30]),1,1)+1

Maxel

Ersetze zunächst mal die Kommas durch Semikolons.
Viele Grüße
Maxel

accessy

Aaah ja,
ich habe das Komma gegen das Semikolon getauscht.
Okay, Fehler gibt es keinen mehr,
aber dafür ist das Ergebnis totaler Müll.

Statt mit dem 22.10.2012 als Resultat 296 in die Textbox zu bringen,
steht dort etwas von 2,2E07....

Irgendetwas stimmt da noch nicht mit der Formel

daolix

Stimmt die kommatas sind falsch aber ansonsten sollte es funktionieren.

die funktion sollte so ausschauen:
=[Text30]-DatSeriell(Jahr([text30]);1;1)+1



accessy

Ich gebs auf....
aber nicht wegen der Formel jetzt. Die ist exakt so drin....

Jetzt öffne ich die DB wieder und sehe, dass die Textbox30 leer ist.
Diese Textbox für das Datum ist NICHT gesperrt, und dennoch kann ich da nichts eingeben.
Nichts zu machen....
Ey dieses Access..... zum Verzweifeln....

Ich gehe wieder zurück zur manuellen Methode...
Ich hacke die 296 da rein und dann stimmt das Ergebnis wenigsten

Danke dir für die Hilfe

daolix

Hab jetzt kein plan wo jetzt das problem bei dir liegt, ich kenn ja deine db nicht.
hier mal ein sehr simples Bsp


[Anhang gelöscht durch Administrator]

database

Hallo,

ZitatJetzt öffne ich die DB wieder und sehe, dass die Textbox30 leer ist.
Dann ist dieses Textfeld NICHT an ein Tabellenfeld der Datenherkunft des Formulars gebunden sondern ein ungebundenes Feld.
Wenn du in ein ungebundenes Feld einen Wert eingibst und danach das Formular oder die Datenbank schließt,
ist beim nächsten Öffnen dieser Wert nicht mehr vorhanden - das ist kein Bug von Access sondern ganz normal.

ZitatSchön wäre es, wenn ich das automatisch hätte, sobald ich das Datum in Text30 ändere.
Das ist ja nicht das Problem, das kann auf unterschiedliche Weise erfolgen.
Wichtig ist in erster Linie jedoch, dass dieses Feld an die Datenherkunft des Formulars gebunden ist!
Dann kann ich dir noch DRINGEND dazu raten deine Formularfelder so zu benennen, dass du auch
am Namen sehen kannst was da drin stehen sollte. (z.B. txtDatum, txtTag, ...)

Vorausgesetzt dein Eingabefeld heißt nun 'txtDatum' und das Ausgabefeld heißt 'txtTag'
KANNST du den untenstehenden Code in den VBA-Bereich deines Formulars kopieren.
Dann wählst du für die Ereignisse 'Beim Anzeigen' des Formulars und 'Nach Aktualisierung' des Feldes 'txtDatum'
m Entwurfsmodus 'Ereignisprozedur' aus. Wenn das Datumsfeld nun WIRKLICH an ein Feld der Datenherkunft GEBUNDEN ist,
In diesem Feld ein Datum steht, dann wird beim Öffnen des Formulars, bei Datensatzwechsel und Änderung des Datums der richtige Tag des Jahres angezeigt.



Private Function TagDesJahres() As String
   Dim Jahr As Integer, tdj As Date
   Jahr = Year(Me.txtDatum)
   tdj = "1.1." & Jahr
   TagDesJahres = DateDiff("d", tdj, Me.txtDatum) + 1
End Function

Private Sub Form_Current()
   Me.txtTag = TagDesJahres
End Sub

Private Sub txtDatum_AfterUpdate()
   Me.txtTag = TagDesJahres
End Sub


Zur Demo habe ich dir eine MusterDB mit einer ganz einfachen Tabellen/Formular-Kombination angehängt.

HTH

[Anhang gelöscht durch Administrator]

accessy

Hallo Leute,

so, ich habe mir mal eure Beispiel DB gezogen und werde das mal versuchen auf meine umzusetzen.
Ich melde mich später, wie es funktioniert.

Vielen, vielen Dank erstmal

accessy

Also,
ich hab mal das Beispiel von DAOLIX geladen.
Funktioniert einwandfrei....in deinem Beispiel, aber nicht bei mir.

Mein Registersteuerelement hat kein UF drin. Da stehen nur einige Textboxen drin, die ihre Daten aus einer Abfrage erhalten.
=DomSumme("Umsatz...usw...)
Die Textbox im Beispiel von DAOLIX ist auch UNGEBUNDEN, so wie bei mir.
Aber obwohl ich "Gesperrt = NEIN" habe, kann ich kein Datum eingeben. Nichts zu machen.
IM Beispiel der DB von DALOLIX geht das aber.... ich verstehe das nicht....

Das Beispiel von DATABASE brauche ich wohl gar nicht erst testen,
weil in meinem Registersteuerelement kein UF und somit auch keine Datenherkunft existiert.


DF6GL

#11
Hallo,


Hallo,

"Da stehen nur einige Textboxen drin, die ihre Daten aus einer Abfrage erhalten."


=DomSumme("Umsatz...usw...)



ist keine Abfrage, eher ein Ausdruck, der eine Domänenfunktion (Domsumme(), bzw. DCount() ) aufruft und den entspr. Wert liefert, der in da Textfeld übertragen wird.



"..ist auch UNGEBUNDEN, so wie bei mir."


Da irrst Du: Ein solches Textfeld ist NICHT UNGEBUNDEN, sondern eben an diesen AUSDRUCK GEBUNDEN.  Da ein Ausdruck nur Werte liefert, aber keine entgegennehmen kann, ist auch eine manuelle Eingabe in das Textfeld nicht möglich.

Von WELCHEM Datum ( wo steht der drin, bzw. woher kann diese Datum geholt werden? ) willst Du denn den Tag des Jahres wissen? Doch sicherlich nicht von einem (Umsatz-) Wert, der durch eine solche Funktion:

=DomSumme("Umsatz...usw...)


geliefert wird..   ??

ebs17

In die Datenherkunft des Textfeldes:
=DatTeil("j"; [Text30])

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard

accessy

Also, erst einmal habe ich meine Textboxen mit Namen belegt.

Eine der Registersteuerelemente beinhaltet lediglich ein paar Textboxen.
In diesen Textboxen steht z:B.

=DomSumme("Umsatz";"Werkzeug_Artikel";"Jahr = 2012

Dadurch erhalte ich den aktuellen Umsatz des Jahres 2012 bis zu einem bestimmten Tag.

Wenn ich nun den Umsatz aufs Jahresende kumuliert hochrechnen möchte,
nehme ich einfach das Datum, bis zu dem dieser Umsatz vorliegt.
Dieses Datum habe ich einfach mal als reinen Steuerelementinhalt ohne Rechenfunktion in die Textbox mit Namen "Txt_Datum" eingetragen.
Aktuell steht dort in dieser Textbox mit Namen Txt_Datum "=27.10.2012", dass es der 301 Tag des Jahres ist. Ist also nur ein Infofeld...mehr nicht.

In der Textbox mit Namen "Kumuliert" steht als Formel

=([Umsatz2012])/301*365

Und diese Zahl 301 trage ich manuell ein.
Dann habe ich noch die Textbox mit namen GV
Hier drin steht

=Format([Kumuliert]/[Umsatz2011]-1;"#.00 %")


Es gibt also kein Datenherkunftsfeld für das Datum.
Mein Ziel war es, das Datum in das Feld Txt_Datum einzutragen, so dass durch eine automatische Ermittlung sich die Zahl - in diesem Fall 301 - ergibt und die Textbox mit Namen Kumuliert rechnet.
Die Umsatzzahlen entnehme ich einfach vom Firmenserver an einem Tag meiner Wahl. Wenn ich z.B. die Zahlen am 19.11.2012 rausziehe, dann trage ich als Info einfach die 19.11.2012 ein und in die Formel der Textbox ändere ich die 301 gegen die 324.
So einfach mache ich das.... Aber es wäre halt schön, wenn ich das Datum manuell irgendwo eintrage und dann diese Zahl 324 errechnet bekomme.

Vielleicht geht es ja, dass ich einfach eine Tabelle erstelle und das Datum dort eintrage.
Dann geht das eventuell, dass die Textbox Txt_Datum als Datenherkunft diese Tabelle nimmt.
Dann gäbe es eine echte Datenherkunft für TxT_Datum.

Und dann könnte ja die Zahl 301 als Variable "Txt_Datum" ersetzt werden.
Vielleicht wäre das ja der richtige Weg.

Ich hoffe, dass diese ausführliche Beschreibung verständlich war.

daolix

Ich hinterfrage jetzt nicht wie du deine Daten vom Firmenserver aufarbeitest/ermittelst.

ZitatAktuell steht dort in dieser Textbox mit Namen Txt_Datum "=27.10.2012", dass es der 301 Tag des Jahres ist. Ist also nur ein Infofeld...mehr nicht.
Nun damit hast du aber keine ungebundene Textbox, wie dir Franz es schon geschrieben hatte. Auch hatte ich das in meinem Bsp auch so nicht gemacht.

Zitat=DomSumme("Umsatz";"Werkzeug_Artikel";"Jahr = 2012Dadurch erhalte ich den aktuellen Umsatz des Jahres 2012 bis zu einem bestimmten Tag.
nein eigentlich nicht, denn hier wird das gesamte Jahr berechnet, aber wie gesagt ich weis nicht wie diese daten aus "Werkzeug_Artikel" ermittelt werden ( sind das nackte Daten auf dem Firmenserver oder liegt dahinter eine Abfrage etc).

ZitatVielleicht geht es ja, dass ich einfach eine Tabelle erstelle und das Datum dort eintrage.
Dann geht das eventuell, dass die Textbox Txt_Datum als Datenherkunft diese Tabelle nimmt.
Dann gäbe es eine echte Datenherkunft für TxT_Datum.
So ählich hatte ich das gemacht, nur wurde das Datum mit 2 Zeilen VBA gelesen und geschrieben.