Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: accessy am Oktober 26, 2012, 13:06:51

Titel: Wievielter Tag des Jahres ermitteln
Beitrag von: accessy am Oktober 26, 2012, 13:06:51
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?
Titel: Re: Wievielter Tag des Jahres ermitteln
Beitrag von: daolix am Oktober 26, 2012, 13:20:28
evtl so
=[DeinDatum] - Dateserial(year([DeinDatum]), 1, 1) + 1
Titel: Re: Wievielter Tag des Jahres ermitteln
Beitrag von: accessy am Oktober 26, 2012, 14:21:43
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
Titel: Re: Wievielter Tag des Jahres ermitteln
Beitrag von: Maxel am Oktober 26, 2012, 14:33:44
Ersetze zunächst mal die Kommas durch Semikolons.
Titel: Re: Wievielter Tag des Jahres ermitteln
Beitrag von: accessy am Oktober 26, 2012, 14:56:20
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
Titel: Re: Wievielter Tag des Jahres ermitteln
Beitrag von: daolix am Oktober 26, 2012, 15:09:27
Stimmt die kommatas sind falsch aber ansonsten sollte es funktionieren.

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


Titel: Re: Wievielter Tag des Jahres ermitteln
Beitrag von: accessy am Oktober 26, 2012, 15:21:06
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
Titel: Re: Wievielter Tag des Jahres ermitteln
Beitrag von: daolix am Oktober 26, 2012, 16:29:28
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]
Titel: Re: Wievielter Tag des Jahres ermitteln
Beitrag von: database am Oktober 26, 2012, 16:43:20
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]
Titel: Re: Wievielter Tag des Jahres ermitteln
Beitrag von: accessy am Oktober 27, 2012, 10:56:21
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
Titel: Re: Wievielter Tag des Jahres ermitteln
Beitrag von: accessy am Oktober 27, 2012, 16:59:33
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.

Titel: Re: Wievielter Tag des Jahres ermitteln
Beitrag von: DF6GL am Oktober 27, 2012, 21:00:43
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..   ??
Titel: Re: Wievielter Tag des Jahres ermitteln
Beitrag von: ebs17 am Oktober 28, 2012, 09:59:56
In die Datenherkunft des Textfeldes:
=DatTeil("j"; [Text30])

MfGA
ebs
Titel: Re: Wievielter Tag des Jahres ermitteln
Beitrag von: accessy am Oktober 28, 2012, 11:32:05
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.
Titel: Re: Wievielter Tag des Jahres ermitteln
Beitrag von: daolix am Oktober 28, 2012, 12:53:41
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.

Titel: Re: Wievielter Tag des Jahres ermitteln
Beitrag von: accessy am Oktober 28, 2012, 16:16:51
So, lieber DAOLIX,

ich habe deine Lösung mit der Eingabe eines Datums in ein Feld der Tabelle hinbekommen.
Das funktioniert jetzt einwandfrei.
Ich bedanke mich vielmals für diese Lösung (Auch wenn ich die VBA Einträge nicht nachvollziehen kann)
Aber das wird sicherlich auch bei anderen Usern so sein.

Jetzt noch eine andere Frage.
Ich aber nun noch ein Registersteuerelement, das KEIN UF hat.
Jetzt habe ich das "Klick_Ereignis" auf dieses Registersteuerelement so betrachtet,
wie du es mir als Lösung für das Laden (Form_load) gebracht hast.

Das funktioniert auch. Die Textbox erhält aus der Tabelle den aktuellen Wert für den Tag des Jahres.
Soweit so gut. Die berechneten Werte stimmen auch.

Aber die Textbox Txt_Datum hat irgendeinen Eurowert drin (zumindest optisch).
Klicke ich auf diese TxT_Datums Textbox steht da plötzlich das Datum korrekt drin.
Ob hier das Ereignis "After_Update" nicht greift?
Die Berechnungen allerdings stimmen trotzdem.

Es sieht nur einfach blöd aus, wenn man dieses Registersteuerelement öffnet, die richtigen Berechnungen bekommt,
aber als Stand der Berechnungen nicht das Datum sieht, sondern irgendeinen Eurowert.

Hast du dafür noch eine Idee, oder Lösung?

Titel: Re: Wievielter Tag des Jahres ermitteln
Beitrag von: daolix am Oktober 28, 2012, 23:58:34
Stell mal in den Eigenschaften für diese Textbox das Format auf z.B. Datum lang ein. Hat den Vorteil das du immer ein Datum siehst und das deine Eingabe überprüft wird.
Titel: Re: Wievielter Tag des Jahres ermitteln
Beitrag von: accessy am Oktober 29, 2012, 07:13:48
Super, das sieht jetzt gut aus.
Volle Funktion.

Vielen dank für die tatkräftige Unterstützung zu meinem Anliegen.
Titel: Re: Wievielter Tag des Jahres ermitteln
Beitrag von: Das_Hexagon am Oktober 29, 2012, 12:29:57
Ich vermute das Problemchen ist schon weitestgehend von der heutigen Agenda verschwunden.
Dennoch möchte ich meine Alternativlösung los werden.

Sollte man vor Codes und Feldberechnungen zurückschrecken bietet sich auch die Lösung über eine SQL-Abfrage an.

Voraussetzung dafür ist, dass man die Jahresdaten im Datumsformat zumindest in einer geschlüsselten Tabelle abgespeichert hat.
Anschließend kann man in einer zweiten Tabelle einen eigenen Kalender erstellen, in dem alle Daten des Jahres 2012 von 01.01.2012 bis
31.12.2012 enthalten sind. Die Datensätze dort müssen nummeriert sein von 1 bis 365 Tage. (jew. pro Jahr) Zum Erstellen bietet sich Excel an, der Kalender
kann dann nach Fertigstellung einfach nach Access importiert werden.

Nun über eine 1:n Verknüpfung in über eine Abfrage die beiden Tabellenfelder mit den Daten (müssen beide im Datumsformat formatiert sein)
verbinden und schon sucht Access die richtige Nummerierung für uns aus dem Kalender heraus.


Nachteil:
Es wird für jedes Jahr ein eigener Kalender benötigt.

Vorteil:
1. Wer häufig seine Daten aktualisieren und den Vorgang automatisieren will, der ist mit dieser Lösung vom Aufwand und Nutzen gut
bedient.
2. Es können dem Kalender noch zusätzliche Daten angefügt werden (z.B. Wochentage, besondere betriebsbedingte Ereignisse (Betriebsversammlung,
Geburtstage, etc.) oder gesetzliche Feiertage, usw.)
3. Die Lösung - einmal umgesetzt funktioniert einfach, automatisiert und transparent.
4. Funktioniert auch mit älteren Access Versionen, bspw. 2000 und älter.