Da gibt es nichts fertiges. Muss man sich selber daraum kümmern.
Ganz, ganz, gaaaanz einfaches Beispiel:
Private Sub UserForm_Initialize()
With Controls.Add("FORMS.TEXTBOX.1")
.Left = 10
.Top = 10
.Width = Me.Width / 2 - .Left
Call UpdateSettings(Controls(.Name))
End With
With Controls.Add("FORMS.TEXTBOX.1")
.Left = Me.Width / 2
.Top = 35
End With
Call UpdateSettings(Me)
End Sub
Private Sub UserForm_Resize()
Dim objControl As MSForms.Control
Dim vntDataUF As Variant
Dim vntDataCTL As Variant
vntDataUF = GetSettings(Me)
For Each objControl In Controls
vntDataCTL = GetSettings(objControl)
If UBound(vntDataCTL) >= 0 Then
objControl.Width = vntDataCTL(2) * Me.Width / vntDataUF(2)
Call UpdateSettings(objControl)
Else
objControl.Left = objControl.Left + Me.Width - vntDataUF(2)
End If
Next
Call UpdateSettings(Me)
End Sub
Private Function GetSettings(Obj As Object) As Variant
GetSettings = Split(Obj.Tag, ";")
End Function
Private Sub UpdateSettings(Obj As Object)
Obj.Tag = Join(Array(Obj.Left, Obj.Top, Obj.Width, Obj.Height), ";")
End Sub
Wie du schon erwähnt hast, muss man für jedes Control einen Anker festlegen und wie es sich bei einem Resize verhalten soll.
Dies lässt sich mittels Klassenprogrammierung in VBA noch ganz gut umsetzen; ist jedoch aufwendig.
Grüße
|