[英]Resize Userform and its Controls with VBA
我正在尝试使用VBA调整用户窗体及其控件的大小,以适应不同大小的监视器。 以下是我正在使用的基于Ron DeBruin的代码( http://www.rondebruin.nl/mac/mac022.htm )的代码。
本质上,该代码旨在缩放用户窗体的大小和位置及其所有控件。
问题是我在执行时遇到错误(如下所示)
"Run-time error '-2147467259(80004005)': Method 'Properties' of object '_VBComponent' failed"
我尝试用.Top
替换.Properties("Top")
,但我得到Object doesn't support this property or method
错误。
DeBruin先生的代码自此生效; 但是我不知道为什么它不起作用。 任何帮助将不胜感激。
Sub ChangeUserFormAndControlsSize()
Dim AppUserform As Object
Dim FormControl As Object
Dim NameUserform As String
Dim SizeCoefficient As Single
SizeCoefficient = wsControls.Range("SizeCoefficient")
NameUserform = "form_APScheduler"
Set AppUserform = ThisWorkbook.VBProject.VBComponents(NameUserform)
With AppUserform
.Properties("Top") = .Properties("Top") * SizeCoefficient '*** ERROR OCCURS HERE
.Properties("Left") = .Properties("Left") * SizeCoefficient
.Properties("Height") = .Properties("Height") * SizeCoefficient
.Properties("Width") = .Properties("Width") * SizeCoefficient
End With
For Each FormControl In AppUserform.Designer.Controls
With FormControl
.Top = .Top * SizeCoefficient
.Left = .Left * SizeCoefficient
.Width = .Width * SizeCoefficient
.Height = .Height * SizeCoefficient
On Error Resume Next
.Font.Size = .Font.Size * SizeCoefficient
On Error GoTo 0
End With
Next FormControl
End Sub
根据您的最新评论,下面是一些示例代码,显示了如何在运行时更改属性,而无需访问VBIDE.VBProject对象。 当然,这些变化不会持久。
Option Explicit
Sub testForm()
Dim UF As form_APScheduler
Dim FormControl As MSForms.Control
Dim SizeCoefficient As Double
SizeCoefficient = inputNumber("Scale Factor: ", "Form", 1)
Set UF = New form_APScheduler
With UF
.Top = .Top * SizeCoefficient
.Left = .Left * SizeCoefficient
.Width = .Width * SizeCoefficient
.Height = .Height * SizeCoefficient
End With
For Each FormControl In UF.Controls
With FormControl
.Top = .Top * SizeCoefficient
.Left = .Left * SizeCoefficient
.Width = .Width * SizeCoefficient
.Height = .Height * SizeCoefficient
On Error Resume Next
.Font.Size = .Font.Size * SizeCoefficient
On Error GoTo 0
End With
Next FormControl
UF.Show
Unload UF
End Sub
Function inputNumber(prompt As String, title As String, defValue As Variant) As Variant
inputNumber = Application.InputBox(prompt, title, defValue, , , , , 1)
End Function
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.