Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 通过在userforms中循环设置模块的userform宽度_Vba_Userform - Fatal编程技术网

Vba 通过在userforms中循环设置模块的userform宽度

Vba 通过在userforms中循环设置模块的userform宽度,vba,userform,Vba,Userform,我遇到了一个非常令人沮丧的问题,似乎在任何地方都找不到解决方案-非常感谢您的帮助 我知道如何从userform本身Me.width中更改userform的宽度 问题是,我正在编写一个模块,该模块将动态格式化用户表单。模块被传递一个表单,并对该表单执行一些操作。到目前为止,只要我指的是表单上的对象,一切都能正常工作 但是我现在尝试引用表单本身,当我尝试更改表单的宽度,而不是表单上的控件的宽度时,我得到了一个错误:对象不支持此属性或方法 我已经尝试将它声明为UserForm和Object,所有其他代

我遇到了一个非常令人沮丧的问题,似乎在任何地方都找不到解决方案-非常感谢您的帮助

我知道如何从userform本身Me.width中更改userform的宽度

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

但是我现在尝试引用表单本身,当我尝试更改表单的宽度,而不是表单上的控件的宽度时,我得到了一个错误:对象不支持此属性或方法

我已经尝试将它声明为UserForm和Object,所有其他代码在这两种情况下都可以工作,但是调整宽度却不行。我可以在即时窗口中看到宽度不可用,这显然是代码无法执行的原因

以下是我尝试过但没有成功的代码:

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?类似Userformfrm1.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
另请参见为什么在使用表单之前避免使用默认实例并创建自己的表单显式实例是一种好做法:


这些信息对你有帮助吗?为了让我们更深入地了解您的具体问题,请尝试在一个小的代码示例中重现您的问题,并将其发布在此处,并详细说明哪一行产生了错误。同意@PeterT-很难准确地想象您正在做什么以及问题在哪里。一些代码在这里会有很大帮助。啊,很抱歉,这是第一次发布,但时间太长了,所以我应该知道得更多!我已经用一个示例代码块调整了我的问题。感谢您推荐这些网站-如果我理解正确,它们与动态/实时大小调整相关。我追求的是更简单的东西——从userform之外的模块调整userform的大小,在这里我不能引用“我”。谢谢你,蒂姆。我不知道使用默认实例会有什么问题——我看过很多没有的示例代码,但是没有把显式实例更好的原因联系起来。不幸的是,解决方案不起作用-当我注释掉表单宽度行时,它确实起作用,但我得到相同的“对象不支持此属性或方法”错误对我来说很好,但我在Excel中进行了测试,所以可能您使用的是不同的VBA主机?啊,这非常有趣。我也在使用Excel,所以在一个空白工作簿中重新测试,结果成功了。因此,我返回并再次尝试将模块中的所有其他代码注释掉。长话短说,我将其追溯到一个从模块内部调用的函数,并将表单作为变量传递给该模块进行检查。在您的指导下,我创建了两个表单实例以传递到主模块中——一个用于函数,另一个仅用于主模块。这就成功了-谢谢你!