Faça com que um formulário contínuo defina sua altura automaticamente
-
21-12-2019 - |
Pergunta
Estou tentando fazer com que um formulário contínuo defina sua altura para ser igual à altura do Cabeçalho + altura do Rodapé + altura do Detalhe.Isso evita que um formulário com apenas dois ou três registros tenha muito espaço em branco.Por outro lado, quero que um grande número de registros apareça em um formulário com 10 registros por página e seta para baixo/para cima para ver o restante dos registros.Estes são os procedimentos que configurei:
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
Ele ignora a declaração se ... então ... else e cria um formulário mostrando todos os registros em uma janela que é incontrolável.
Ele funciona para uma forma de menos de 11 registros (obviamente), mas acho que tenho que adicionar a altura de um registro extra, caso contrário, coloca o último registro em uma segunda página.Veja:
FrmHt = (NumRecs * FrmDet) + FrmHdr + FrmFtr + FrmDet
Posso conviver com isso, mas realmente gostaria de resolver o problema da instrução If…Then…Else ser ignorada.
Mudei a conversão de tipo para Variant e Double, mas isso não fez diferença.
Solução
Parece haver um problema no seu código:você usa FrmHt
na tua If
afirmação, mas não tem valor nesse ponto, sempre será 0
.
Acho que você provavelmente deseja que sua declaração seja algo como:
If NumRecs > 11 Then
FrmHt = 11 * FrmDet + FrmHdr + FrmFtr
Else
FrmHt = (NumRecs * FrmDet) + FrmHdr + FrmFtr + FrmDet
End If
O outro problema do último registro estar na próxima página pode ser porque você está muito apertado ao exibir os 10 registros na tela e durante a conversão de twips para pixels, erros de arredondamento podem tornar a altura total um pouco menor do que seria. necessário para 10 registros.
Tente adicionar alguns twips ao seu FrmHT
resultado para ver se isso funciona.