Eis uma pergunta, que faço há dois anos, e todas as soluções encontradas, não facilitaram em nada, e então usei o POG (Programação Orientada a Gambiarra), e vem funcionando bem.
Isto é complicado, mas vai a dica mais ou menos.
Nomeie duas variáveis publicas, do tipo Double
cwidTH e cheigHT
Uma variável pública do tipo Form
fresiZE
Uma variável pública do tipo Control
oobJ
Pegue a resolução do monitor, form main
xTWIPS = Screen.TwipsPerPixelX
yTWIPS = Screen.TwipsPerPixelY
yPIXELS = Screen.Height / yTWIPS
xPIXELS = Screen.Width / xTWIPS
Use como padrão a 800x600
cheigHT = (yPIXELS / 600)
cwidTH = (xPIXELS / 800)
Ao carregar o formulário
Me.Height = (9000 * cheigHT)
Me.Width = (12000 * cwidTH)
Set fresiZE = Me
TAMANHO
Chame uma função pública que ajeita os controles no formulário(TAMANHO)
Public Function TAMANHO()
Dim i As Integer
Dim nCOL As Column
For Each oobJ In fresiZE.Controls
If oobJ.Top > 0 Then
oobJ.Top = (oobJ.Top * cheigHT)
End If
If oobj.Left > 0 Then
oobJ.Left = (oobJ.Left * cwidTH)
End If
oobJ.Height = (oobJ.Height * cheigHT)
oobJ.Width = (oobJ.Width * cwidTH)
Next
End Function
A função está resumida, é preciso que vc teste colunas de grades, linhas etc, na função,
e também verifique que alguns controles, não aceitam a mudança, em tempo de execução,
alguns aceitam height, não width, e vice versa.
Mas, está ai a idéia, e foi o que fiz, trabalhoso, sim, no inicio, depois fica fácil, e funciona perfeitamente.
Agora o resto é com voce.
vlu//