Hacer un formulario continuo establecer su altura automáticamente
-
21-12-2019 - |
Pregunta
Estoy tratando de hacer un formulario continuo y establecer su altura para que sea igual a la altura del encabezado + altura del pie de página + altura del detalle.Esto es para evitar que un formulario con sólo dos o tres registros tenga una gran cantidad de espacios en blanco.Por el contrario, quiero que aparezca una gran cantidad de registros en un formulario con 10 registros por página y la flecha hacia abajo/arriba para ver el resto de los registros.Estos son los procedimientos que configuré:
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
Ignora la declaración if ... entonces ... de lo contrario y crea un formulario que muestra todos los registros en una ventana que es inmanejable.
Funciona para una forma de menos de 11 registros (obviamente) pero encuentro que tengo que agregar la altura de un registro adicional, de lo contrario, coloca el último registro en una segunda página.Verbigracia:
FrmHt = (NumRecs * FrmDet) + FrmHdr + FrmFtr + FrmDet
Puedo vivir con esto, pero realmente me gustaría resolver el problema de que se ignore la declaración If...Then...Else.
Cambié el tipo de conversión a Variante y Doble, pero esto no hizo ninguna diferencia.
Solución
Parece haber un problema con tu código:tu usas FrmHt
en tus If
declaración, pero no tiene valor en ese momento, siempre será 0
.
Creo que probablemente quieras que tu declaración sea algo como:
If NumRecs > 11 Then
FrmHt = 11 * FrmDet + FrmHdr + FrmFtr
Else
FrmHt = (NumRecs * FrmDet) + FrmHdr + FrmFtr + FrmDet
End If
El otro problema de que el último registro esté en la página siguiente puede deberse a que es demasiado estricto al mostrar los 10 registros en la pantalla y durante la conversión de twips a píxeles, los errores de redondeo pueden hacer que la altura total sea un poquito menor de lo que sería. necesario para 10 registros.
Intente agregar algunos trucos a su FrmHT
resultado para ver si esto funciona.