运行此代码时,我收到错误消息。
Dim usf as object
If usfOKNAR01.Visible = True Then
k = 1
Set usf = VBA.UserForms(usfOKNAR01) 'here I'm getting the error
ElseIf usfOKNAR02.Visible = True Then
k = 2
Set usf = VBA.UserForms(usfOKNAR02) 'here I'm getting the error mesage
End If
我想创建一个动态对象控件,它控制着2个名为usfOKNAR01和usfOKNAR02的Userforms。
根据哪些是可见的,将设置正确的,然后像这样使用usf.Controls(“txt”& k&“oknar13”)。我的代码的其他部分的值。
我不知道问题出在哪里? 谢谢你的帮助!
我已删除了部分代码,但它似乎有效,但我不知道这是否是解决问题的正确方法。 这里是新代码:
Dim usf as object
If usfOKNAR01.Visible = True Then
k = 1 Set
usf = usfOKNAR01
ElseIf usfOKNAR02.Visible = True Then
k = 2 Set
usf = usfOKNAR02
End If
答案 0 :(得分:1)
您不能使用名称或类名作为VBA.UserForms
的索引 - 它只接受整数索引参数。如果你不知道集合的整数索引,你就必须迭代它:
Dim usf As Object
Dim found As Boolean
If usfOKNAR01.Visible = True Then
k = 1
Dim candidate As Object
For Each candidate In VBA.UserForms
If TypeOf candidate Is usfOKNAR01 Then
found = True
Exit For
End If
Next usf
If found Then Set usf = candidate
'...
由于您需要至少两次这样做,我建议将其提取到一个功能。
请注意,如果代码运行时未加载任何一个表单,VBA将在您测试它们是否可见时实例化它们。