Nun, für sowas würde ich persönlich die Eingabefelder nicht per Makro erzeugen sondern einfach ein entsprechendes Formular gestalten - oben mit einer Leiste von Feldern wo die Filterkriterien eingetragen werden, unten ein Tabellenelement welches die Ergebnisse beinhaltet. Wenn ich Dich richtig verstanden habe, möchtest Du nach folgenden Kriterien filtern können:
1. Person
2. Datum
Lass mich das etwas vereinfacht machen und zuerst mit der Person anfangen:
Das würde ich gar nicht per Makro tun, sondern durch ein Formular mit einem Unterformular, wobei die jeweiligen Formulare eben über die Personal-ID verknüpft sind, dann kann ich schon nach Personen filtern. Ist Dir klar wie man das macht? Wenn nicht, gibst Du bestimmt Bescheid. Hier wird die ID (also Personalnummer) ausgelesen, um diese als Rückgabewert zu erhalten obwohl Du einen Namen aussuchst empfehle ich ein Listenfeld.
Filtern nach Datum wird schwieriger, weil es hier nicht mehr um eine einfache Übereinstimmung sondern um Zeitspannen von... bis... geht. Hierfür würde ich im Filter zwei Datumsfelder anlegen, die mit keinem der Felder der DB verknüpft sind sondern nur vom Makro gelesen werden.
Dies funktioniert dann so:
Code: Alles auswählen
dim oDoc as Object, oForm as Object, oEl as Object
oDoc=thisComponent
oForm=oDoc.Drawpage.Forms.GetByName("NameDesFormulars") ' den Namen kannst Du im Formularnavigator einsehen, verändern etc.
oEl=oForm.GetByName("Datumsfeld-von")
von=oEl.text 'dieses Datum ist in einem Format, welches wir so fürs Filtern nicht gebrauchen können.... also verändern wir das Datum in ein Format, welches von der DB verstanden wird:
von=CDateToIso(von)
oEl=oForm.GetByName("Datumsfeld-bis")
bis=oEl.text
bis=CDateToIso
Nun filtern wir nach Datum:
Code: Alles auswählen
oForm=oDoc.Drawpage.Forms.GetByName("Name des Unterformulars")
oForm.CommandType=2 'hier sage ich dem Formular vorsichtshalber nochmal dass sein Inhalt spätestens von jetzt an ein SQL-Befehl ist
MeinSQLbefehl="SELECT * FROM ""Zusatztabelle"" WHERE ""Datum""<"+(bis+1)+" AND ""Datum"">"+(von-1) 'bitte achte hier auf die doppelten "
oForm.Command=MeinSQLbefehl
oForm.reload() 'Das Formular wird nun neu geladen, das Tabellenelement müsste jetzt die gefilterten Infos haben.
Code: Alles auswählen
oEl=oForm.getByName("Personal")
Persnr=oEl.value
meinFilter="" ' das bedeutet nur nach Datum filtern - lege ich jetzt so fest
if oEL<>0 then
meinFilter="nach Person filtern"
Personalnr=oEl.value
end if
Code: Alles auswählen
if meinFilter="" then
oForm.CommandType=2
MeinSQLbefehl="SELECT * FROM ""Zusatztabelle"" WHERE ""Datum""<"+(bis+1)+" AND ""Datum"">"+(von-1)
else
oForm.CommandType=2
MeinSQLbefehl="SELECT * FROM ""Zusatztabelle"" WHERE ""Datum""<"+(bis+1)+" AND ""Datum"">"+(von-1)+" AND ""Personalnr""="+Personalnr
end if
oForm.Command=MeinSQLbefehl
oForm.reload()

Gruss
Arek
P.S.: Darf ich fragen was Deine Aufgabe im Betrieb ist?

