
When we design Usserform with controls it is condinate with your screen. When userform resize we want to resize all controls. I have a good solution by Userform.Zoom property, it is very simple.
Private Const ZoomMin = 10
Private Const ZoomMax = 400
Public hWnd&, PrevStyle&
Dim OldWidth As Double, OldHeight As Double
Dim AllowResize As Boolean
Private Sub UserForm_Activate()
ShowWindow hWnd, SW_MAXIMIZE
End Sub
Private Sub UserForm_Initialize()
AllowResize = True
OldWidth = Width
OldHeight = Height
If Val(Application.Version) < 9 Then
hWnd = FindWindow("ThunderXFrame", Caption) 'XL97
Else
hWnd = FindWindow("ThunderDFrame", Caption) 'XL2000
End If
PrevStyle = GetWindowLong(hWnd, GWL_STYLE)
SetWindowLong hWnd, GWL_STYLE, PrevStyle _
Or WS_SIZEBOX _
Or WS_MINIMIZEBOX _
Or WS_MAXIMIZEBOX
End Sub
Private Sub UserForm_Terminate()
SetWindowLong hWnd, GWL_STYLE, PrevStyle
End Sub
Private Sub UserForm_Resize()
Dim tmpZoom As Long, CurStyle&
If Not AllowResize Then Exit Sub
CurStyle = GetWindowLong(hWnd, GWL_STYLE)
tmpZoom = Round(Width / OldWidth * 100, 0)
If tmpZoom < ZoomMin Then tmpZoom = ZoomMin
If tmpZoom > ZoomMax Then tmpZoom = ZoomMax
AllowResize = False 'Ngan khong chay UserForm_Resize khi dang thay doi size
If tmpZoom = ZoomMin Or tmpZoom = ZoomMax Then
'Neu khong phai la phong to man hinh thi co lai kich co
If Not (CurStyle And WS_MAXIMIZE) = WS_MAXIMIZE Then
Width = tmpZoom * OldWidth / 100
Height = Width * OldHeight / OldWidth
End If
End If
AllowResize = True 'Cho phep resize
Zoom = tmpZoom
End Sub
Support code for Userform can resize you must use Windows API function:
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, _
ByVal nCmdShow As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Ahthor: Nguyen Duy Tuan - BLUESOFTS.,jsc
You can download sourcecode