0

我有一个带有 2 个文本框、2 个标签和一个登录按钮的用户表单。

在我的 excel 表上,我有一个带有 id、name、pin 和 balance 的数据库。

问题是每当我单击登录按钮时,我的 ID 文本框会将其值重置为 0,但我的 pin 文本框工作正常!

我将粘贴我的完整代码:

Dim ID As Integer
Dim PIN As Integer
Dim PINField As String
Dim Balance As Double
Dim Attempts As Integer
Dim BalanceField As String


Private Sub btnLogin_Click()
    txtID.Text = ID
    Call SetId
    Call Authenticate
End Sub

Sub Authenticate()
    If txtPin.Text = PIN Then
        Call Welcome
    ElseIf Attempts > 3 Then
        Call Bye
    Else
        lblWelcome.Caption = "Wrong Pin"
        lblWelcome.ForeColor = RGB(255, 0, 0)
        Attempts = Attempts + 1
    End If
End Sub

Sub SetId()
    PINField = "C" & Str(ID)
    PINField = Replace(PINField, " ", "")
    MsgBox (PINField)
    BalanceField = "D" & Str(ID)
    BalanceField = Replace(BalanceField, " ", "")
    MsgBox (BalanceField)
End Sub

Sub Welcome()
    MsgBox ("Login Successful. Welcome")
End Sub

Sub Bye()
    MsgBox ("Max Pin Attempts reached. Contact Your Bank")
    Unload frmLogin
End Sub
4

2 回答 2

0

这样做的原因是因为您使用的变量没有值。因为它是一个Integer它返回0。

我猜你可能真的想要ID = txtID.Text- 也就是说,获取 txtID 文本框的值并将值存储在 ID 变量中。

这可能会出错,因为Text文本框的属性是字符串。您将需要使用ID = CInt(txtID.Text). 您还应该进行一些检查以确保 txtID.Text 在分配之前计算为整数。

于 2013-01-12T13:37:40.167 回答
0

请确保reset您在此处未显示的代码中的任何地方都没有 txtID。查看您的代码,它没有说明您如何将值设置IDPIN...PIN

尼克指出的情况可能是这种情况,因为这是一个允许人们进入并且..然后您将其与 .. 进行比较的Form情况。但是你在比较什么?正如您所说,您在工作表中有一种数据库类型的结构。你需要评估和使用它。textboxesIDPINPINIDPIN

这是我为您的工作表提供的可视化,这是我最好的盲目猜测:

用户需要通过表单输入一个值到txtID. 该数字实际上是包含相关的cell numberfor 列。然后将该 PIN 与 txtPIN 值进行比较。接下来根据该返回from 列。CPINbalanceDPIN

尝试这个:

Private Sub btnLogin_Click()
    If txtID.Text <> "" Or txtID.value > 0 or txtPIN.Text <> "" Then
      ID = CInt(txtID.Text)
      Call SetID
      Call Authentication
    Else
      MsgBox "ID and PIN" can't be empty!"
    End If
End Sub

Sub Authenticate()
    If CInt(txtPin.Text) = PIN Then '-- here
        Call Welcome
        '-- idealy Blance can be shown at this point... 
    ElseIf Attempts > 3 Then
        Call Bye
    Else
        lblWelcome.Caption = "Wrong Pin"
        lblWelcome.ForeColor = RGB(255, 0, 0)
        Attempts = Attempts + 1
    End If
End Sub   

Sub SetId()       
      PIN = CInt(Trim(Sheets(1).Range("C" & ID).value))
      '-- NOT sure why you are showing this PIN here since you want to authenticate...?
      MsgBox PIN
      BalanceField = Sheets(1).Range("D" & ID).value  
      BalanceField = Trim(BalanceField) '--here
      '-- doesn't make sense to show Balance before authentication... 
      MsgBox BalanceField        
End Sub

于 2013-01-12T14:40:19.987 回答