![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Inventar
![]() |
![]() ich melde mich nochmal im Fall ACCESS/VBA
![]() ich bin jetzt schon ziemlich weit, allerdings liegt noch ein Problem vor mir, das ich nicht knacken konnte: in einer Tabelle werden VON und BIS daten in zwei Spalten eingetragen (ZB: 01.10.2000 20.10.2000) jetzt möchte ich in eine dritte Tabellenzelle eintragen lassen, wie groß der Anteil am Monat Oktober ist. also müsste ich 20/30=2/3=0,666 irgendwie in die Tabelle bekommen. a) wie bekomme ich (in VBA) am einfachsten die Anzahl der Tage heraus? b) wie kann ich dann herausfinden, wie viele Tage der monat gerade hat (also müsste ich xx.10.xxxx als Oktober identifizieren können, Schaltjahre sind egal) c) wie bekomme ich das dann am sichersten in die dritte Spalte der Tabelle (recordset.with etc nehm ich an) wenn jemand eine Idee hat bitte versuche gleich Code zu schreiben, ich steck in dem Problem jetzt schon 3 Tage fest.. aber auch ein kleiner Tipp ist sicher hilfreich ! ![]() mfg
____________________________________
Der Unterschied zwischen Theorie und Praxis ist, das es in der Theorie keinen Unterschied zwischen Theorie und Praxis gibt, in der Praxis aber schon. Wer schreibt, der bleibt! |
![]() |
![]() |
![]() |
#2 |
Master
![]() Registriert seit: 22.03.2000
Alter: 66
Beiträge: 550
|
![]() Hi!
Kannst du das Problem auch für "einfache" Geister beschreiben. Ich versteh nur Bahnhof. Ansonsten kann die Lösung nicht so schwer sein. mfg WB |
![]() |
![]() |
![]() |
#3 | |
Inventar
![]() |
![]() Zitat:
![]() in einer Tabelle stehen in zwei spalten von und bis-daten für jede Person werden da laufend daten angelegt. in der letzten Spalte sollte jetzt als dezimale zahl stehen, wie viele Anteile die Arbeitszeit in Tagen am ganzen Monat hat. also wenn er 10 tage arbeitet sind das (in einem 30-Tage Monat) 1/3 also Schritte: Daten einlesen (Von-Bis) dann die Tage ausrechen (also die Different bilden nehm ich an" Bis (minus) Von") dann durch die Anzahl der Monatstage dividieren (also 28, 30 oder 31 Tage), wobei ich die Anzahl der Tage im Monat wenn möglich auch aus einer Tabelle auswählen möchte-> also das das Script erkennt -> 2.10.2000 bis 15. 10.2000 sind 14 Tage und der Oktober (kann ich das aus den Daten herausfinden lassen xx.10.xxx=Oktober ? kann nicht über die Monatsgrenzen gehen!!) hat 31 Tage also 14/31=0,45 (Anteil) ... oje das ist nicht viel einfacher gelungen ![]()
____________________________________
Der Unterschied zwischen Theorie und Praxis ist, das es in der Theorie keinen Unterschied zwischen Theorie und Praxis gibt, in der Praxis aber schon. Wer schreibt, der bleibt! |
|
![]() |
![]() |
![]() |
#4 |
Master
![]() Registriert seit: 22.03.2000
Alter: 66
Beiträge: 550
|
![]() Könnte ungefähr so funktionieren:
Function PartOfMonth(strDateEnd As String, strDateStart As String) Dim intDaysCount As Integer intDaysCount = Day(strDateEnd) - Day(strDateStart) + 1 PartOfMonth = intDaysCount / DaysPerMonth(strDateStart) End Function Function DaysPerMonth(strDate As String) As Integer Dim intMonth As Integer intMonth = Month(strDate) Select Case intMonth Case 1, 3, 5, 7, 8, 10, 12 DaysPerMonth = 31 Case 2 DaysPerMonth = 28 Case 4, 6, 9, 11 DaysPerMonth = 30 End Select End Function mfg WB |
![]() |
![]() |
![]() |
#5 | |
Inventar
![]() |
![]() Zitat:
erneut Danke ![]() mfg
____________________________________
Der Unterschied zwischen Theorie und Praxis ist, das es in der Theorie keinen Unterschied zwischen Theorie und Praxis gibt, in der Praxis aber schon. Wer schreibt, der bleibt! |
|
![]() |
![]() |
![]() |
#6 |
Veteran
![]() Registriert seit: 08.02.2001
Alter: 41
Beiträge: 320
|
![]() das geht auch einfacher:
Anteil = DateDiff("d", DATUM_VON, DATUM_BIS, vbMonday, vbFirstJan1) / Day(DateSerial(Year(Date), Month(Date) + 1, 0))
____________________________________
Nein, ich bin nicht die Signatur, ich putz hier nur. http://www.chili-it.at |
![]() |
![]() |
![]() |
#7 | |
Inventar
![]() |
![]() Zitat:
bekomme ih durch die DateSerial() die Anzahl der Tage? und was muss nach Year() und Month() in den KLammern stehen? (welcher Teil des Datums) kann ich nicht einfach zb 12.2.2000 verwenden? muss ich 12/2/2000 schreiben (bzw kann ich das irgedwie einfach umwandeln? meine Datumsfelder haben nämlich das format dd.mm.yyyy ... ) mfg
____________________________________
Der Unterschied zwischen Theorie und Praxis ist, das es in der Theorie keinen Unterschied zwischen Theorie und Praxis gibt, in der Praxis aber schon. Wer schreibt, der bleibt! |
|
![]() |
![]() |
![]() |
#8 |
Veteran
![]() Registriert seit: 08.02.2001
Alter: 41
Beiträge: 320
|
![]() Hi, aus der Access-Hilfe:
DateSerial() ... Das folgende Beispiel verwendet numerische Ausdrücke anstelle von absoluten Datumszahlen. Die DateSerial-Funktion gibt in diesem Fall das Datum für den Tag vor dem ersten Tag (1 - 1) des Monats zurück, der zwei Monate vor August (8 - 2) liegt, und zwar 10 Jahre vor dem Jahr 1990 (1990 - 10). Das Ergebnis ist der 31. Mai 1980. DateSerial(1990 - 10, 8 - 2, 1 - 1) ... Das heißt in unserem Fall, dass wir das aktuelle Jahr, das nächste Monat, und den Tag vor dem ersten des (angegebenen) nächsten Monats bekommen. Sprich den letzten Tag des aktuellen Monats. Wenn ich nun den letzten Tag des Monats Juli haben will, dann muss die Syntax so ausschauen: DateSerial(2004, 9, 1-1) (Da nach Adam Riese 1-1 gleich 0 ist, kann man auch 0 schreiben, aber 1-1 ist sicher einfacher nachzuvollziehen) Aus dieser Funktion bekomme ich das Ergebnis 31.08.2004. Jetzt noch ein Day("31.08.2004") und ich hab die gewünschte Zahl 31! Ist alles ein bissl kompliziert, aber wenn man das mal durchschaut, dann gehts schon ![]()
____________________________________
Nein, ich bin nicht die Signatur, ich putz hier nur. http://www.chili-it.at |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|