使用VBA调整用户窗体及其控件的大小

使用VBA调整用户窗体及其控件的大小,vba,excel,userform,Vba,Excel,Userform,我试图用VBA调整userform及其控件的大小,以适应不同大小的监视器。下面是我使用的代码,它基于Ron DeBruin的代码() 本质上,该代码设计用于缩放用户表单及其所有控件的大小和位置 问题是我在执行时遇到了一个错误(如下所示) "Run-time error '-2147467259(80004005)': Method 'Properties' of object '_VBComponent' failed" 我尝试用.Top替换.Properties(“Top”),结果发现对象不

我试图用VBA调整userform及其控件的大小,以适应不同大小的监视器。下面是我使用的代码,它基于Ron DeBruin的代码()

本质上,该代码设计用于缩放用户表单及其所有控件的大小和位置

问题是我在执行时遇到了一个错误(如下所示)

"Run-time error '-2147467259(80004005)': Method 'Properties' of object '_VBComponent' failed"
我尝试用
.Top
替换
.Properties(“Top”)
,结果发现
对象不支持此属性或方法
错误

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

您是否已启用通过信任中心访问VBA项目对象模型?这是使用对象模型所必需的。是的,它已启用。当我试图让DeBruin先生的代码正常工作时,最终我希望能够遍历工作簿中的所有用户表单,以便对它们进行扩展。大意是:对于工作簿中的每个AppUserform…我不确定在哪种情况下会出现问题,但会警告说,需要在使用userform的每台计算机上手动启用对VBA项目对象模型的访问。我可以毫无错误地运行该代码。如果您在AppUserform上设置了一个中断,并为AppUserform设置了一个监视,您会看到什么?物体还好吗?另外,SizeCoefficient在这一点上可以吗?我在AppUserform上设置了一个手表。我看到了什么?这里有很多信息(请原谅我的无知),但有一件看起来很有趣的事情是“Name:“form_APScheduler”:String:Module1.ChangeUserFormAndControlsSize”。名字是正确的。物体还好吗?我不知道该找什么来回答这个问题。SizeCofficient可以吗?对变量仍然具有正确的值(本例中为(.75)。问题:这可以通过另一种方式完成吗,即不访问VBA项目对象模型?谢谢您的编码帮助。它工作得很好。谢谢你抽出时间。(我很抱歉花了这么长时间才回复;家人都死了。)