Erstellen Sie ein Endlosformular, dessen Höhe automatisch eingestellt wird
-
21-12-2019 - |
Frage
Ich versuche, die Höhe eines Endlosformulars so einzustellen, dass sie der Höhe der Kopfzeile + der Höhe der Fußzeile + der Höhe des Details entspricht.Dadurch soll vermieden werden, dass ein Formular mit nur zwei oder drei Datensätzen viel Leerraum enthält.Umgekehrt möchte ich, dass auf einem Formular eine große Anzahl von Datensätzen angezeigt wird, mit 10 Datensätzen pro Seite und Pfeil nach unten/oben, um den Rest der Datensätze anzuzeigen.Dies sind die Verfahren, die ich eingerichtet habe:
Public Function NumRecs() As Integer
NumRecs = DCount("*", "tblDisclosure", "Not IsNull(FormSentOff) and IsNull(DBSInvoice))
End Function
Public Function FrmHt() As Integer
Dim FrmDet As Integer
Dim FrmHdr As Integer
Dim FrmFtr As Integer
FrmDet = Form.Section(0).Height
FrmHdr = Form.Section(1).Height
FrmFtr = Form.Section(2).Height
If FrmHt > (11 * FrmDet + FrmHdr + FrmFtr) Then
FrmHt = 11 * FrmDet + FrmHdr + FrmFtr
Else
FrmHt = (NumRecs * FrmDet) + FrmHdr + FrmFtr + FrmDet
End If
End Function
Private Sub Form_Load()
Me.Move Left:=8000, Top:=1000, Width:=9240, Height:=FrmHt
End Sub
Es ignoriert die Anweisung IF… dann… sonst und erstellt ein Formular, das alle Datensätze in einem Fenster zeigt, das nicht verwaltbar ist.
Es funktioniert für eine Form von weniger als 11 Datensätzen (offensichtlich), aber ich finde, dass ich die Höhe eines zusätzlichen Datensatzes hinzufügen muss. Andernfalls wird der letzte Rekord auf einer zweiten Seite gestellt.Nämlich:
FrmHt = (NumRecs * FrmDet) + FrmHdr + FrmFtr + FrmDet
Ich kann damit leben, aber ich würde wirklich gerne das Problem lösen, dass die If…Then…Else-Anweisung ignoriert wird.
Ich habe die Typumwandlung auf „Variant“ und „Double“ geändert, aber das hat keinen Unterschied gemacht.
Lösung
Es scheint ein Problem mit Ihrem Code zu geben:Sie nutzen FrmHt
in deinem If
Aussage, aber zu diesem Zeitpunkt hat sie keinen Wert, sie wird es immer sein 0
.
Ich denke, Sie möchten wahrscheinlich, dass Ihre Aussage etwa so lautet:
If NumRecs > 11 Then
FrmHt = 11 * FrmDet + FrmHdr + FrmFtr
Else
FrmHt = (NumRecs * FrmDet) + FrmHdr + FrmFtr + FrmDet
End If
Das andere Problem, dass sich der letzte Datensatz auf der nächsten Seite befindet, kann darin liegen, dass Sie die 10 Datensätze zu genau auf dem Bildschirm anzeigen und bei der Konvertierung von Twips in Pixel Rundungsfehler dazu führen können, dass die Gesamthöhe etwas geringer ist als erwartet notwendig für 10 Datensätze.
Versuchen Sie, ein paar Twips zu Ihrem hinzuzufügen FrmHT
Ergebnis, um zu sehen, ob das funktioniert.