调用userform并返回值

问题描述 投票:6回答:3

我有一个Auto_Open的vba代码。它会进行一些检查,然后提示用户表单询问用户名和密码。我用userform_name.show调用了这个用户表单。

我的问题是如何从userform代码返回Boolean到我的Auto_Open子。

我将验证凭据是否正确的代码链接到表单上的“登录”按钮。这是产生布尔值的代码。我需要将它返回到Auto_Open。

Private Sub loginbutton()
    Dim bool As Boolean
    Dim lrup
    Dim r As Long
    Dim pass As String

    loginbox.Hide

    'are fields empty
    Do While True
        If unBox.Text = "" Or pwBox.Text = "" Then
            MsgBox ("You must enter a Username and Password")
        Else
            Exit Do
        End If
        loginbox.Show
        Exit Sub
    Loop

    'find pw reated to username (if existant)
    lrup = UserPass.Range("A1").Offset(UserPass.Rows.Count - 1, 0).End(xlUp).Row

    If unBox = "b0541476" And pwBox = "theone" Then
        bool = True
    Else
        MsgBox ("Invalid username or password. Please try again.")
        loginbox.Show
        Exit Sub
    End If

    For r = 2 To lrup
        If unBox = Cells(r, 1) Then
            pass = Cells(r, 2).Value
            Exit For
        End If
    Next

    If pass = "" Then
        MsgBox ("Invalid username or password. Please try again.")
        loginbox.Show
        Exit Sub
    Else
        bool = True
    End If
End Sub
excel excel-vba excel-2010 userform vba
3个回答
3
投票

从userform代码区域中删除Dim bool As Boolean并在模块中声明它,如下所示

这就是您的代码在模块中的样子

Public bool As Boolean

Sub Auto_Open()
    '
    '~~> Rest of the code
    '
    UserForm1.Show

    If bool = True Then
        '~~> Do Something
    Else
        '~~> Do Something        
    End If

    '
    '~~> Rest of the code
    '
End Sub

2
投票

如何使用函数而不是sub?

Function loginbutton()
  ' your code

  loginbutton = bool
End Function

现在在您的调用代码中,您可以测试true / false

if loginbutton() then
  'true responce
else
  'false responce
end if

1
投票

您可以设法在不使用公共变量的情况下执行此操作。

show / hide和加载/卸载之间似乎有区别。

如果在表单仍然加载时隐藏它,它将不会被清除,因此您可以引用表单上控件的状态。

例如,我在表单上使用日期选择器(称为DTPicker1),模块中的代码如下所示:

Dim NewDay As Date

Load FrmDayPicker
FrmDayPicker.Show

NewDay = FrmDayPicker.DTPicker1.Value

Unload FrmDayPicker

Debug.Print NewDay

在你的表单上,你可以使用qazxsw poi而不是qazxsw poi,这应该工作

© www.soinside.com 2019 - 2024. All rights reserved.