用变量替换用户表单名称

时间:2018-06-20 15:49:02

标签: excel-vba vba excel

我在“ Module1”中添加了以下函数,以确定用户形式的文本框的最大值,该文本框名为“ frmAddRecord2”,可以输入。

txtLV和txtMaxLV是“ frmAddRecord2”下的文本框。

txtMaxLV_Pass也是一个布尔变量,也放在frmAddRecord2下。在此阶段,此功能可以正常工作。

Public Function txtLV_Max() As Long

    With frmAddRecord2
        If .txtLV.Value >= 99 Or Not .txtMaxLV_Pass Then
            txtLV_Max = 109
        Else
            txtLV_Max = .txtMaxLV.Value - 1
        End If
    End With

End Function

因为我将拥有“ frmAddRecord1”,“ frmAddRecord2”,“ frmAddRecord3”等,所以我想在frmAddRecord1或frmAddRecord2时调用以下子项  被激活。

Public Sub SetActiveUserForm(Optional UserFormName As String)

    If UserFormName = "frmAddRecord1" Then
        Set ActiveUserForm = frmAddRecord1
        UserFormShown = True
    ElseIf UserFormName = "frmAddRecord2" Then
        Set ActiveUserForm = frmAddRecord2
        UserFormShown = True
    Else
        Set ActiveUserForm = Nothing
        UserFormShown = False
    End If

End Sub

我想将函数重构为:

Public Function txtLV_Max() As Long

    With activeuserform
        If .txtLV.Value >= 99 Or Not .txtMaxLV_Pass Then
            txtLV_Max = 109
        Else
            txtLV_Max = .txtMaxLV.Value - 1
        End If
    End With

End Function

但是,在“如果.txtLV.Value> = 99或不是 .txtMaxLV_Pass 然后”行发生错误。经过测试后,我在重构函数后发现无法调用txtMaxLV_Pass。如果我将txtMaxLV_Pass移到Module1下公开,它将再次正常工作。

但是我想问一下,如果我想将txtMaxLV_Pass保留在userform下,在声明userform变量时应该更改什么。请指教,我已经在网站和书籍中对此进行了研究,但仍然无法解决。谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

全局变量ActiveUserForm的类型为Userform。但是,要从Userform变量访问UserForm属性,实际上它必须为ObjectVariant类型。