Vor einiger Zeit habe ich einen Tipp veröffentlicht, mit dem es möglich war festzulegen, welche und wie viele Datensätze in der Datensatz-Ansicht beim Öffnen eines Access-Formulars angezeigt werden sollen. Heute möchte ich Ihnen eine verbesserte Variante des Tipp vorstellen, bei dem man die Anzahl der Datensätze nicht direkt durch eine Wertzuweisung festlegt, sondern prozentual zur aktuellen Formgröße! Modul mit Beispiel-Aufruf: Option Compare Database Option Explicit Public Function ZeigeDatensätze2(Form_1 As Form, PROZ_VON_DETAIL As Integer) ' ************************************************************************ ' *** 9/2005 verbesserte Funktion ' ************************************************************************ ' Funktion füllt den Bildschirm eines Formulars Form_1 so aus, ' dass PROZ_VON_DETAIL % des Formular-Detail-Bereiches mit ' Datensätzen gefüllt werden. ' (Der aktuelle Datensatz soll %-ual immer an einer "bestimmten" Stelle stehen.) ' Der aktuelle Datensatz soll (richtig!) markiert werden ! ' Parameter: ' Form_1 geöffnetes! Formular (nicht nur der Form-Name! ) ' PROZ_VON_DETAIL Prozentangabe ganzzahlig ' ' Die Funktion sollte wie folgt aufgerufen werden : ' ' - aus Code heraus, wenn Form gerade geöffnet wurde also offen ist : ' zB. "Call ZeigeDatensätze2(Forms![For_HauptFormular], 66)" ' ' Achtung ! die Funktion NICHT beim Laden des Formulars aufrufen, ' weil dann immer nur die Normal-Fenster-Höhe des Formulars berücksichtigt ' wird, auch dann, ' wenn (vom letzten Mal gemerkt) maximiert geöffnet wurde. ' ************************************************************************ On Error GoTo ERR_01 Dim rst1 As Recordset, i, n Dim FH_FORM ' Form-Fenster-Höhe Dim FBH_DETAIL ' Form-Bereichs-Höhe Detailbereich , ="Datensatz"-Höhe Dim FBH_KOPF ' Form-Bereichs-Höhe FormularKopf Dim FBH_FUSS ' Form-Bereichs-Höhe FormularFuss ' Bemerkung: ' Formular SeitenKopf und -Fuss sind nur beim Drucken relevant ? Dim PLATZ_IN_DETAIL ' Platz(-Höhe) im Gesamt-Detailbereich, ' also zwischen Kopf und Fuss ... Dim SATZ_ZAHL_PMAX ' Satzzahl, die max. entsprechend angegebenem Parameter ' "PROZ_VON_DETAIL" (sicher) in den Detailbereich passt. Dim AUSF_PLATZ ' entsprechend Proz.-Angabe auszufüllende Höhe im Det.Bereich FH_FORM = Form_1.InsideHeight ' Form-Fenster-Innen-Höhe gesamt ! FBH_DETAIL = Form_1.Section(acDetail).Height ' "Datensatz"-Höhe FBH_KOPF = Form_1.Section(acHeader).Height ' Form-Kopf-Höhe FBH_FUSS = Form_1.Section(acFooter).Height ' Form-Fuss-Höhe ' ---------------------------------------------- PLATZ_IN_DETAIL = FH_FORM - FBH_KOPF - FBH_FUSS ' Höhe des Gesamt-Detailbereichs ' ---------------------------------------------- ' *** Anzahl der aktuellen Sätze ermitteln ***************************** ' ******************************* 2005-09-22 *************************************** ' *** Ist die Form-Source eine evtl. "wilde" Abfrage ? -> dann DCount benutzen ! ' *** (Abblocken eventueller Fehlermeldung "zu wenig Parameter..." !!!) ' ********************************************************************************** Dim qdf1 As QueryDef For Each qdf1 In CurrentDb.QueryDefs If qdf1.Name = Form_1.RecordSource Then i = DCount("*", Form_1.RecordSource) ' Source ist Abfrage --> DCount nutzen! GoTo i_IS_OK ' Datensätze - Anzahl ist ermittelt End If Next qdf1 ' ---- Normale Ermittlung der Satz-Zahl direkt Aus Form-Record-Source ---- Set rst1 = CurrentDb.OpenRecordset(Form_1.RecordSource, dbOpenSnapshot) Do Until rst1.EOF rst1.MoveNext Loop i = rst1.RecordCount ' Anzahl der aktuellen Sätze aus Form-RecordSource rst1.Close Set rst1 = Nothing i_IS_OK: ' ********************************************************************** AUSF_PLATZ = (PROZ_VON_DETAIL / 100) * PLATZ_IN_DETAIL ' %-Bereich ' --- Wieviele Sätze passen denn nun rein in den %-Bereich ? ******************** SATZ_ZAHL_PMAX = Fix(AUSF_PLATZ / FBH_DETAIL) - 1 ' -1 ist zur Sicherheit... ' Dim X ' TEST-Meldungs-Text ' X = "" ' X = X & FH_FORM & " Fenster-Innen-Höhe" & vbNewLine & vbNewLine ' X = X & FBH_DETAIL & " Satz-Höhe" & vbNewLine ' X = X & FBH_KOPF & " Kopf-Höhe" & vbNewLine ' X = X & FBH_FUSS & " Fuss-Höhe" & vbNewLine ' X = X & PLATZ_IN_DETAIL & " Platz füer Sätze" & vbNewLine ' X = X & Fix(PLATZ_IN_DETAIL / FBH_DETAIL) & " Sätze passen rein bei 100 %" & _ ' vbNewLine & SATZ_ZAHL_PMAX & " Sätze passen rein bei " & " = " & _ ' PROZ_VON_DETAIL% & " %" & vbNewLine ' MsgBox X ' ///////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ DoCmd.GoToPage 1, 0, PLATZ_IN_DETAIL ' 2005-09-18 ' DoCmd.GoToPage [pagenumber][, right, down] ' right A numeric expression that's a valid horizontal offset for the page. ' down A numeric expression that's a valid vertical offset for the page. DoCmd.GoToRecord acForm, Form_1.Name, acLast ' *** 2005-05-17 Vorher Satz schwarz markieren !!, ' dabei Steuerelemente verlassen !!! *** DoCmd.RunCommand acCmdSelectRecord ' If i >= SATZ_ZAHL_PMAX - 1 Then If i > SATZ_ZAHL_PMAX - 1 Then ' 2005-10-01 !!!!!! For n = 1 To SATZ_ZAHL_PMAX - 1 DoCmd.GoToRecord acForm, Form_1.Name, acPrevious Next n Else For n = 1 To i - 1 DoCmd.GoToRecord acForm, Form_1.Name, acPrevious Next n End If Form_1.Repaint ' notwendig ? If Form_1.AllowAdditions = True Then ' Fehler 2105, wenn Form keine neuen erlaubt !!! DoCmd.GoToRecord acForm, Form_1.Name, acNewRec Else ' neuer geht nicht, dafür letzten Satz ! DoCmd.GoToRecord acForm, Form_1.Name, acLast End If Form_1.Repaint ' notwendig ? Exit Function ERR_01: If Err.Number = 2105 Then ' neuer geht nicht, dafür letzten Satz ! DoCmd.GoToRecord acForm, Form_1.Name, acLast Else MsgBox "ZeigeDatensätze2(Form_1 As Form, PROZ_VON_DETAIL As Integer): " & _ Err.Number & " " & Err.Description End If End Function Public Function AufrufZeigeDatensätze2() ' Das Bild so "verschieben", dass der Bildschirm ' vernünftig ausgefüllt wird Call ZeigeDatensätze2(Forms![For_HauptFormular], 66) End Function Dieser Tipp wurde bereits 10.691 mal aufgerufen.
Anzeige
![]() ![]() ![]() (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 ![]() ![]() Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats ![]() Manfred Bohn IndexOf für mehrdimensionale Arrays Die generische Funktion "IndexOf" ermittelt das erste Auftreten eines bestimmten Wertes in einem n-dimensionalen Array Neu! sevDTA 3.0 Pro ![]() SEPA mit Kontonummernprüfung Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |