2013-01-12 54 views
0

我有一個用戶窗體2文本框,2個標籤和登錄按鈕。Excel VBA文本框重置爲0當我按下按鈕

在我的Excel表格中,我有一個ID,名稱,別針和平衡的數據庫。

問題是每當我點擊登錄按鈕我的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 
+0

你從哪裏得到'ID'?當你說文本框重置,你指的是'txtID'? – bonCodigo

回答

0

它這樣做的原因是因爲您使用的是沒有價值的變量。由於它是一個Integer它返回0.

我猜你可能實際上想要有ID = txtID.Text - 也就是說,採取txtID文本框的值並將值存儲在ID變量中。

這可能會出錯,但因爲文本框的Text屬性是一個字符串。您將需要使用ID = CInt(txtID.Text)。您還應該執行一些檢查以確保txtID.Text在賦值之前評估爲整數。

+0

那麼這似乎是顯而易見的,這就是爲什麼要問哪裏OP獲取'ID'的數據。如果你的情況是這樣,爲什麼OP說'PIN'有效?看着他的代碼,我沒有看到有任何暗示'PIN'的價值。 OP說*我的pin文本框工作正常* ... – bonCodigo

+0

@bonCodigo因爲他的代碼不會將txtPin.Text設置爲任何東西。 –

0

請確保沒有reset代碼中的任何地方的txtID沒有顯示在這裏。看你的代碼,它並沒有說什麼,你是如何設定的值要麼IDPIN ......你說的它的正常工作爲PIN,所以這讓我很好奇......

這可能是這樣的尼克指出,鑑於這是一個Formtextboxes允許人們輸入IDPIN ..然後你將它與PIN進行比較。但是你在比較什麼?正如你所說的,你在表單中有一種數據庫類型的結構。您需要使用它分配IDPIN

下面是可視化我對你的表,這是我最好的盲目猜測:

用戶需要通過形式輸入一個值txtID。該數字實際上是cell numberC其中包含相關PIN。然後,您將該PIN與txtPIN值進行比較。接下來根據PIN從列D返回balance

試試這個:

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