Excel VBA 形成错误消息循环

Excel VBA Forms Error Message loop

我目前在 excel (VBA) 中有一个简单的登录表单有问题,当出现错误时,继续并出现另一个错误它仍然给我两个更多的 MsgBoxes 有错误但是"Unload Me" 和 "Goto Ende" 它应该完全关闭自己。

猜猜为什么这不起作用?我知道这是非常基本的,可能非常多余,但它应该仍然有效。

Public Name As Variant
Public Password As Variant

Private Sub Btn_Register_Cancel_Click()
    Unload Me
End Sub

Private Sub Btn_Register_Register_Click()

Start:

Dim Error As Integer

Error = 0

Name = Tbx_Register_Name.Value
Password = Tbx_Register_Password.Value

'Check for Name, Password, Password2 if empty
If Tbx_Register_Name.Value = "" Then
    Error = MsgBox("Please enter a username.", _
            vbRetryCancel, "Error")

        If Error = 2 Then
            Unload Me
            GoTo Ende

        Else
            Application.ScreenUpdating = False
            Register.Hide
            Register.Show
            Application.ScreenUpdating = True
            GoTo Start

        End If

ElseIf Tbx_Register_Password.Value = "" Then
    Error = MsgBox("Please enter a password.", _
            vbRetryCancel, "Error")

        If Error = 2 Then
            Unload Me
            GoTo Ende

        Else
            Application.ScreenUpdating = False
            Register.Hide
            Register.Show
            Application.ScreenUpdating = True
            GoTo Start

        End If

ElseIf Tbx_Register_Password2.Value = "" Then
    Error = MsgBox("This field cannot be empty.", _
            vbRetryCancel, "Error")

        If Error = 2 Then
            Unload Me
            GoTo Ende

        Else
            Application.ScreenUpdating = False
            Register.Hide
            Register.Show
            Application.ScreenUpdating = True
            GoTo Start

        End If

End If

With Workbooks("General Makro.xlsx").Worksheets("User")
'Check for Username match in registration list
For i = 1 To 100

    If .Cells(i, 1).Value = Name Then

        Error = MsgBox("This username is already taken.", _
            vbRetryCancel, "Error")

        If Error = 2 Then
            Unload Me
            i = 100
            GoTo Ende


        Else
            Application.ScreenUpdating = False
            Register.Hide
            Register.Show
            Application.ScreenUpdating = True
            GoTo Start

        End If

    End If

Next i

End With

'Check for the passwords to match
If Tbx_Register_Password.Value = Tbx_Register_Password2.Value Then

    With Workbooks("General Makro.xlsx").Worksheets("User")

        For i = 1 To 100

            If .Cells(i, 1) = "" Then

                .Cells(i, 1).Value = Name
                .Cells(i, 2).Value = Password

                Tbx_Register_Password.Value = ""
                Tbx_Register_Password2.Value = ""


                Application.ScreenUpdating = False
                Register.Hide
                Login.Show
                Tbx_Login_Name.Value = .Cells(i, 1).Value
                Tbx_Login_Password.Value = .Cells(i, 2).Value
                Application.ScreenUpdating = True

                i = 100
                GoTo Ende

            End If

        Next i

    End With

Else
    Error = MsgBox("The passwords have to match!", vbRetryCancel, "Error")

    If Error = 2 Then
        Unload Me
        GoTo Ende

    Else
        Application.ScreenUpdating = False
        Register.Hide
        Register.Show
        Application.ScreenUpdating = True
        GoTo Start

    End If

End If

Ende:

End Sub

编辑: 我实际上尝试为登录执行第二个用户表单,但碰巧遇到了同样的问题。一切正常,直到我关闭整个程序,然后错误消息再次出现。我卸载用户表单不正确吗? Maby 登录用户表单说打开并在一切都关闭时继续。

编辑 2: 我可以关闭警报,但这将是一个丑陋的解决方案,我绝对不想在程序中的每个关闭按钮上实现任何东西。

您可以使用以下方法验证文本框中的空白值:

If TextBox.Text = "" Then
    MsgBox "Is blank!"
    Unload Me
    GoTo Ende
End If

'Your code

Ende:    Exit Sub

要验证数据库中的用户名和密码,您可以这样做:

Dim sh As Worksheet
Dim LastRow As Long
Dim UserRange As Range
Dim UserMatch As Range

Set sh = ThisWorkbook.Sheets("database")
LastRow = sh.Range("A" & Rows.Count).End(xlUp).Row

Set UserRange = sh.Range("A1:A" & LastRow)

Set UserMatch = UserRange.Find(What:=UserTextBox.Text, LookIn:=xlValues)
If Not UserMatch Is Nothing Then
    MsgBox "User exists!"

    If PwdTextBox.Text = UserMatch.Offset(0, 1) Then
        MsgBox "Pwd matched!"
        'do something
    Else
        MsgBox "Wrong password!"
        'do something
    End If

Else
    MsgBox "User dont exists!"
   'do something
End If

如果数据库中的用户名在 A 列中,密码在 B 列中,这将起作用。