输入不匹配的用户表单

时间:2015-05-17 13:41:21

标签: vba excel-vba excel

运行此代码时,我收到错误消息。

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

1 个答案:

答案 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将在您测试它们是否可见时实例化它们。