我正在尝试使用VBA调整userform及其控件的大小,以适应不同大小的监视器。以下是我使用的代码,它基于Ron DeBruin的代码(http://www.rondebruin.nl/mac/mac022.htm)。
本质上,代码旨在扩展用户表单的大小和位置及其所有控件。
问题是我在执行时遇到错误(如下所示)
"Run-time error '-2147467259(80004005)': Method 'Properties' of object '_VBComponent' failed"
我尝试用.Properties("Top")
替换.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
答案 0 :(得分:0)
根据您的上一条评论,以下是一些示例代码,演示如何在运行时更改属性,而无需访问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