Kalenderwochen einer Combo einschränken

Moderator: ModerationP

Kalenderwochen einer Combo einschränken

Beitragvon Gast » 30. Apr 2021, 08:04

Hallo,
eine Lookup-Tabelle enthält die Kalenderwochen von 1-53.
Wie kann man erreichen, dass eine Combobox eines Formulars beim Öffnen die ersten und die nächsten drei Kalenderwochen der aktuellen Kalenderwoche anzeigt? Also bei heutiger Kalenderwoche von 18 die Anzeige in der Combo 15, 16, 17, 18, 19, 20, 21.
Da müssen wohl Unterabfragen im Ausdruck sein, aber wie musss man erweitern?
Code: Alles auswählen
SELECT tblKW.KwID, tblKW.Kw
FROM tblKW;

Oder ist das nicht der richtige Ansatz?
Gruß Heinz
Gast
 

Re: Kalenderwochen einer Combo einschränken

Beitragvon knobbi38 » 30. Apr 2021, 11:31

Hallo Heinz,

dazu müßtest du einfach nur die aktuelle Kalenderwoche berechnen und dann die Where Bedingung anpassen. Denke aber daran, daß du ggf. auch einen Jahreswechsel berücksichtigst.
Du könnstest aber auch einfach die Combo mit einer entsprechenden Werteliste laden.

Für die Berechnung der ISO KW siehe:
http://www.snb-vba.eu/VBA_ISO_weeknummer_en.html
http://web.archive.org/web/20190612055823/http://dbwiki.net/wiki/VBA_Tipp:_Kalenderwoche_aus_Datum

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3263
Registriert: 02. Jul 2015, 14:23

Re: Kalenderwochen einer Combo einschränken

Beitragvon Gast » 30. Apr 2021, 13:48

Hallo Ulrich,
die aktuelle Kalenderwoche berechnen und dann die Where Bedingung anpassen

Angenommen, die akktuelle KW ist ermittelt, muss man jetzt 2 Abfragen bauen? Eine für die nächsten drei und die andere für die vorherigen Drei? Und das ganze dann zusammen?
Das wird komplex. Bei der KW besonders ("Jahreswechsel").
Aber vielleicht gar keine Abfrage, sondern mit itemdata die aktuelle zeigen und die Combo so klein machen, dass nur 7 reinpassen. Wobei ich nicht ahne, wo dann die aktuelle steht, wahrscheinlich oben.
Ein gangbarer, leichterer Weg?
Gruß Heinz
Gast
 

Re: Kalenderwochen einer Combo einschränken

Beitragvon Maxel » 30. Apr 2021, 14:36

Sieh Dir mal die DateDiff-Funktion an.

Da kannst Du als erten Parameter "q" (für Quartal) einstellen. Für die Kombobox-RowSource musst Du die Where-Bedingung so anpassen, dass sowohl die 3 Quartale vor als auch die 3 Quartale nach dem aktuellen sowie das aktuelle Quartal selbst angezeigt werden.
Viele Grüße von Maxel
Maxel
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 149
Registriert: 28. Mai 2008, 17:57

Re: Kalenderwochen einer Combo einschränken

Beitragvon knobbi38 » 30. Apr 2021, 14:42

Hallo Heinz,

es kommt natürlich darauf an, was du genau damit anstellen möchtest. Ich für meinen Teil würde da kein großes Ding daraus machen und beim Öffnen die Combobox mit den KW Daten per Werteliste initialisieren, fertig.
Wenn Tageswechsel berücksichtigt werden müssen, könnte man das Startdatum in der Tag-Eigenschaft der Combobox vermerkt und ggf. nochmal eine Initialisierung, ausgehend vom neuen Tagesdatum, vorgenommen werden.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3263
Registriert: 02. Jul 2015, 14:23

Re: Kalenderwochen einer Combo einschränken

Beitragvon Gast » 30. Apr 2021, 18:10

Hallo,
danke euch
@Maxel
DateDiff habe ich noch nicht genommen. Später
@Ulrich
auf die Werteliste wäre ich nicht gekommen. Ist doch verpönt, aber vielleicht berechtigt, da nur temporär?
Die Werteliste durch. Wenn es einfacher geht, würde mich das interessieren.
VG Heinz
Code: Alles auswählen
Public Function KWforCombo() As String
  'im Formular
  '  Me.cboKW.RowSource = KWforCombo
  '  Me.cboKW.RowSourceType = "Value List"

  Dim sKWakt As String
  Dim sListeKW As String
  Dim iKW As Integer
  Dim i As Integer
  Dim sKwHigh As String ' die höheren Werte der akt Woche
  Dim sKwLow As String ' die niedr. Werte der akt Woche
  Dim iKwAkt As Integer
  Dim sarrKW() As String
 
  sKWakt = Format(Date, "ww", vbMonday, vbFirstFourDays) '
  iKwAkt = CInt(sKWakt)
 
  'niedere Werte
  For i = 3 To 1 Step -1
    iKW = iKwAkt - i
    sKwLow = sKwLow & CStr(iKW) & ";"
  Next i
 
  sListeKW = sKwLow & sKWakt & ";" 'akt KW dazu
 
  iKW = 0
  For i = 1 To 3
    iKW = iKwAkt + i
    sKwHigh = sKwHigh & CStr(iKW) & ";"
  Next i
 
  'höhere Werte
  sKwHigh = Left(sKwHigh, Len(sKwHigh) - 1) 'ohne letztes Semikolon
  sListeKW = sListeKW & sKwHigh
 
  'alles zusammen für Combo
  sarrKW = Split(sListeKW, ";")
  sListeKW = ""
  For i = 0 To UBound(sarrKW)
    sListeKW = sListeKW & CStr(i) + 1 & ";" & sarrKW(i) & ";"
  Next i
  sListeKW = Left(sListeKW, Len(sListeKW) - 1) 'ohne letztes Semikolon
  KWforCombo = sListeKW
  'Debug.Print KWforCombo
End Function
Gast
 

Re: Kalenderwochen einer Combo einschränken

Beitragvon KlausMz » 30. Apr 2021, 19:27

Hallo,
man könnte auch über eine Kalendertabelle nachdenken.
Besonders wenn die KW häufig gebraucht wird.
Möglicherweise gibt es noch mehr Datumsfunktionen für die Kalendertabelle nützlich wäre.
Auch die Feiertage könnte man damit gleich erschlagen.
In der Kalendertabelle würde man für einen ausreichend großen Bereich jedes Tagesdatum speichern mit redundanten Feldern für die Tagesnummer (1-7) und die KW, die als DINKW ermittelt wird.
Dann kann man vom aktuellen Datum aus 21 Tage zurück und 21 Tage voraus per Abfrage ermitteln und dem Kombi als Datenquelle zuweisen.
Das Datum nicht mit in die Abfrage aufnehmen (nur in der Where Klausel) und die KW gruppieren (Oder Select Distinct ....).
Die Zuweisung wird dann zu einem Einzeiler und das funktioniert völlig problemlos auch über einen Jahreswechsel.
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Benutzeravatar
KlausMz
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 40104
Registriert: 06. Okt 2003, 15:09
Wohnort: Irgendwo in der Pfalz

Re: Kalenderwochen einer Combo einschränken

Beitragvon Maxel » 30. Apr 2021, 21:36

@Maxel
DateDiff habe ich noch nicht genommen. Später


Du benötigst ein fiktives Datum der aktuellen Kalenderwoche (z. B. Date()).

Sowohl beim Blättern nach hinten als auch nach vorn im Kalender wirst Du an Jahresgrenzen stoßen. Ob ein Jahr 52 oder 53 Wochen hat, kannst Du nicht mit Addition oder Subtraktion von Wochenzahlen ermitteln, sondern nur über eine Datums-Funktion.

Eine Werteliste wäre auch nur zu füllen, wenn man das der Wochenzahl vorangestelle Jahr einbezieht.

Die von Klaus zitierte Kalendertabelle ist natürlich auch eine Option.
Viele Grüße von Maxel
Maxel
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 149
Registriert: 28. Mai 2008, 17:57

Re: Kalenderwochen einer Combo einschränken

Beitragvon Gast » 01. Mai 2021, 08:11

Hallo,
@Klaus
In der Kalendertabelle würde man für einen ausreichend großen Bereich jedes Tagesdatum speichern mit redundanten Feldern für die Tagesnummer (1-7) und die KW, die als DINKW ermittelt wird.

Das ist mir jetzt unklar. Felder der Tabelle? Tagesdatum | Tagesnummer | KW? Was meinst du mit DINKW?
Und wie soll dann die KW ausgelesen werden? DLookup?
@
das der Wochenzahl vorangestelle Jahr einbezieht

Das Jahr wird schon meiner Tabelle aus einer Lookup-Tabelle zugewiesen. Oder hat es einen anderen Grund für deinen Vorschlag?
Gruß Heinz
Gast
 

Re: Kalenderwochen einer Combo einschränken

Beitragvon KlausMz » 01. Mai 2021, 11:39

Hallo,
Was meinst du mit DINKW?
Und wie soll dann die KW ausgelesen werden? DLookup?

Die mit
Code: Alles auswählen
Format(Date, "ww", vbMonday, vbFirstFourDays)

ermittelte KW ist bei manchen Jahresendgegebenheiten immer noch falsch.
Daher gibt es verschiedne Funktion die das richtig stellen. Die Funktionen findet man unter dem Begriff "DINKW".
Da braucht es kein DLookUp, die KW muss nicht extra ausgelesen werden. Die steht ja in der Kalendertabelle.
Zur Anzeige der gewünschten KW (+/- 3 KW) in Deinem Kombi braucht es keinen Buchstaben Code, auch nicht für den Jahreswechsel.
Die angesprochene Kalendertabelle ist noch für viele anderen Datumsfunktionen sehr vorteilhaft.
Z.B. Arbeitstage ohne Wochenenden, ohne Feiertage, und/oder ohne betriebliche Freitage usw. usw.
Ich weiß ja nicht ob Du das benötigtst, aber selbst wenn nicht, die gewünschte Funktionalität für das Kombi wird drastisch vereinfacht.

Falls Interesse, mache ich Dir ein kleines Beispiel.

Das Jahr wird schon meiner Tabelle aus einer Lookup-Tabelle zugewiesen. Oder hat es einen anderen Grund für deinen Vorschlag?

Das Jahr eines Datums muss nicht das gleiche Jahr sein wie das der KW. KW52 eines Jahres kann bereits teilweise im Folgejahr liegen.
01.01.2022 und 02.01.2022 liegen in der 52.KW 2021

Wieso brauchst Du zur Ermittelung des Jahres eine Lookup-Tabelle ?
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Benutzeravatar
KlausMz
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 40104
Registriert: 06. Okt 2003, 15:09
Wohnort: Irgendwo in der Pfalz

Re: Kalenderwochen einer Combo einschränken

Beitragvon Gast » 01. Mai 2021, 12:57

Hallo,
Wieso brauchst Du zur Ermittlung des Jahres eine Lookup-Tabelle

Nicht zur Ermittlung, sondern zur Angabe für eine Inventarisierung von Artikeln aus verschiedenen Jahren.
Falls Interesse, mache ich Dir ein kleines Beispiel.

Das nehme ich dankend an. Ich glaube, man kann daran nur lernen, da mein Code in einen Fehler laufen wird bei
Code: Alles auswählen
For i = 3 To 1 Step -1
    iKW = iKwAkt - i
    sKwLow = sKwLow & CStr(iKW) & ";"
  Next i

Ist bei KW 1-3 der Fall.
Gruß Heinz
Gast
 

Re: Kalenderwochen einer Combo einschränken

Beitragvon KlausMz » 01. Mai 2021, 14:56

Hallo,
Nicht zur Ermittlung,
dann lasse es mich anders formulieren:
Wieso brauchst Du für die Zuweisung ein Lookup Tabelle ?
Aus welchem Feld kommt denn das Jahr ?

Im Anhang das versprochene Beispiel.

Erläuterungen:
Die Kalendertabelle ist noch leer.
Öffne das Formular "Formular1" und trage in die Felder Startjahr und Endejahr den gewünschten Jahresbereich ein.
Du kannst Du ruhig von 2020 bis 2050 (30 Jahre) eintragen. Das einmalige Erstellen der Kalendertabelle mit der richtigen DINKW für jeden Tag dieser 30 Jahre dauert gerade mal 3 Sec. und sind ca. 11.000 Datensätze, das ist eine Kleinigkeit für Access.
Die Zahlen für WT entsprechen dem Wochentag für dieses Datum (1=Mo ..... 7=So).
Jetzt hast Du die Kalendertabelle. Mit dem Code in dem VBA Modul hast Du jetzt nichts mehr zu tun, es sei denn, die Kalendertabelle wird erweitert.
Dann siehst Du Dir mal die Abfrage "qryKombifeld" an. Das ist die Abfrage für das Kombi.
Die Tabelle wird hier einfach gefiltert zwischen aktuellem Datum -21 Tage (3*7=21=3 Wochen) und +21 Tagen, auch jahresübergreifend, ganz automatisch.
Kannst Du prüfen, indem Du einfach mal versuchsweise statt 21 Tagen 300 Tage addierst.
Im Formular2 ist dann das Kombifeld.

Schaue es Dir an, bei Fragen melden.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Benutzeravatar
KlausMz
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 40104
Registriert: 06. Okt 2003, 15:09
Wohnort: Irgendwo in der Pfalz

Re: Kalenderwochen einer Combo einschränken

Beitragvon derArb » 01. Mai 2021, 16:04

Hallo,
ein sehr schönes Beispiel von KlausMz.
MfG
derArb

Scio me nihil scire...Εν οίδα οτι ουδέν οίδα... Ich weiss, dass ich nichts weiss (Sokrates)
Ich bevorzuge Beiträge mit korrekter deutscher Grammatik.
derArb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 14656
Registriert: 19. Apr 2006, 18:39
Wohnort: Berlin

Re: Kalenderwochen einer Combo einschränken

Beitragvon agripina » 01. Mai 2021, 17:52

Hallo,
da kann ich nur zustimmen und danke mit einem großen Mai-Strauß in Gelb.
Formular2 bringt genau das, was ich meinte. Super! :D
Beim Testen hatte ich mal ca 76.000 DS; im Explorer eine Dateigröße von ca. 4MB+x. Nach dem Löschen dieselbe Größe. Offensichtlich bewahrt Acc die Daten irgendwie auf. In einer versteckten Tabelle?
Nach Komprimieren & Reparieren 448 KB. Wäre das nicht ein Grund, Access unter Optionen so einzustellen, dass es beim Schließen automatisch immer komprimiert? Macht ihr das?
Die einzelnen Funktionen muss ich mir noch genauer anschauen.
Die Funktionen findet man unter dem Begriff "DINKW"
Bei DINKW in der Hilfe kommt bei mir "Schlüsselwort wurde nicht gefunden". Vielleicht bei höheren Versionen als A2010?
Beim ersten Start kam das gezeigte Bild. Leider weiß ich nicht mehr, ob das bei der Datenquelle einer Combo oder Formulars war oder sonstwo Seltsamerweise ist der Spuk vorbei. Selbst dann, wenn ich eine frische DB, öffne. Kaum anzunehmen, dass das außerhalb von Acc korrigiert wurde. Wahrscheinlich habe ich das entsprechende Objekt nicht gefunden.
Vielleicht kannst du mit dem Ausdruck was anfangen?
Jetzt schau ich mir mal die Funktionen genauer an. Finde ich besser als "hast Du jetzt nichts mehr zu tun".
Wieso brauchst Du für die Zuweisung eine Lookup Tabelle ? Aus welchem Feld kommt denn das Jahr ?

Das ist so: ich habe Artikel, die aus versch. Jahren stammen. Statt immer das Jahr tippen zu müssen, Lookup.
Gruß Heinz
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
agripina
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 43
Registriert: 02. Sep 2018, 22:29

Re: Kalenderwochen einer Combo einschränken

Beitragvon KlausMz » 01. Mai 2021, 18:37

Hallo,
zu DINKW findest Du nichts bei Access, das ist keine originale Access Funktion, daher ist da in der Hilfe auch nichts zu finden.
Das war als Stichwort für Google gedacht, damit Du weist, um was es mit der KW geht.
Da gibt es jede Menge unterschiedlicher Funktionen zur Ermittelung der richtigen europäischen Version für die KW,
die die ich in meinem Beispiel verwende habe ich auch irgendwo gefunden, die ist nicht von mir.
Finde ich besser als "hast Du jetzt nichts mehr zu tun".

Damit meinte ich, dass die Funktionen nur einmalig gebraucht werden, natürlich kannst Du Dich damit beschäftigen.

Für eine DB in der Entwicklungsphase kann man die automatische Komprimierung einschalten.
Wenn die DB produktiv ist, ist das eher nicht mehr notwendig, da es selten notwendig sein sollte etwas zu löschen und schon gar keine größeren Datenmengen.

Die Fehlermeldung kann ich nicht nachvollziehen. Wenn ich zum Testen mein Beispiel noch mal herunterlade ist alles OK.
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Benutzeravatar
KlausMz
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 40104
Registriert: 06. Okt 2003, 15:09
Wohnort: Irgendwo in der Pfalz

Nächste

Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast