通过遍历用户窗体从模块设置用户窗体宽度

Set userform width from a module by looping through userforms

遇到一个非常令人沮丧的问题,我似乎无法在任何地方找到解决方案 - 将不胜感激!

我知道如何从用户表单本身更改用户表单的宽度 (Me.Width)。

问题是我正在编写一个动态格式化用户表单的模块。该模块传递一个表单,它对该表单进行一些操作。到目前为止,只要我指的是表单上的对象,一切正常。

但我现在尝试引用表单本身,当我尝试更改(表单的宽度,而不是表单上控件的宽度)时,我收到错误消息:"Object doesn't support this property or method"。

我已经尝试将它声明为用户窗体和对象,并且所有其他代码在这两种情况下都有效,但调整宽度大小不起作用。我可以立即看到 window 宽度不可用,这显然是代码无法执行的原因。

这是我试过但没有成功的代码:

Sub frmLoadLayoutTest()

frmLoadLayout frmTest
frmTest.Show

End Sub

Private Sub frmLoadLayout(frmActive As Object) 'Also tried (frmActive as UserForm)

'Setting the width of a control works
frmActive.Controls("labelTest").Width = 100 

'Setting the width of the form itself doesn't work
frmActive.Width = 100

End Sub

如果有人能提供一个优雅的解决方案,那就太棒了。或者,有没有一种方法可以按名称引用用户窗体? (类似于 Userform(frm1.name).Width = 100)

提前致谢!

试试这个:

Sub frmLoadLayoutTest()

    Dim frm As frmTest

    Set frm = New frmTest  '<<< create an instance of the form

    frmLoadLayout frm      '<<< pass in the instance
    frm.Show               '<<< show the instance

End Sub

Private Sub frmLoadLayout(frm As Object)
    With frm
        .Controls("labelTest").Width = 100
        .Width = 300
    End With
End Sub

另请参阅为什么最好避免 "default instance" 并在使用前创建您自己的显式表单实例:

https://rubberduckvba.wordpress.com/2017/10/25/userform1-show/