2013-01-12 1 views
0

J'ai un formulaire utilisateur avec 2 zones de texte, 2 étiquettes et un bouton de connexion.Excel VBA Textbox se réinitialise à 0 lorsque j'appuie sur un bouton

Sur ma feuille excel j'ai une sorte de base de données avec l'identification, le nom, la broche et la balance. Le problème est que chaque fois que je clique sur le bouton de connexion, ma zone de texte d'ID réinitialise sa valeur à 0, mais mon bloc de texte de broche fonctionne bien!

i collerez mon code complet:

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

Où obtenez-vous le 'ID'? quand vous dites réinitialisations de zone de texte, faites-vous référence à 'txtID'? – bonCodigo

Répondre

0

La raison pour laquelle le fait est que vous utilisez une variable qui n'a pas de valeur. Comme il s'agit d'un Integer il renvoie 0.

Je suppose que vous voulez probablement avoir ID = txtID.Text - c'est-à-dire, prendre la valeur de la zone de texte txtID et stocker la valeur dans la variable ID.

Cela va probablement erreur, car la propriété Text d'une zone de texte est une chaîne. Vous devrez utiliser ID = CInt(txtID.Text). Vous devez également vérifier que txtID.Text évalue un Integer avant l'affectation.

+0

Eh bien, cela semble être la raison pour laquelle on demande où OP obtient des données pour 'ID'. Et si c'est le cas, pourquoi OP dit-il que 'PIN' fonctionne? En regardant son code, je ne vois pas qu'il y ait une valeur attribuée à 'PIN' non plus. OP a dit que * ma pinbox fonctionne bien * ... – bonCodigo

+0

@bonCodigo Parce que son code ne définit pas 'txtPin.Text' pour n'importe quoi. –

0

Veuillez vous assurer qu'il n'y a aucun reset pour le txtID n'importe où dans le code que vous n'avez pas montré ici. En regardant votre code, il ne dit rien comment vous définissez des valeurs soit ID ou PIN ... Vous avez dit que ça fonctionne bien pour PIN, donc ça me fait très curieux ...

Il pourrait être le cas Nick a souligné que c'est un Form avec textboxes permettant aux gens d'entrer ID et PIN .. Et puis vous le comparez à PIN. Mais avec quoi comparez-vous? Comme vous l'avez dit, vous avez une base de données d'une structure dans la feuille. Vous devez assigner ID et PIN en l'utilisant.

Voici la visualisation que j'ai pour votre feuille, qui est ma meilleure estimation aveugle:

utilisateur doit saisir une valeur via le formulaire en txtID. Ce numéro est en fait le cell number pour la colonne C qui contient le PIN pertinent. Ensuite, vous comparez ce code PIN avec la valeur txtPIN. Ensuite, retournez le balance de la colonne D en fonction de ce PIN.

Essayez ceci:

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 

Questions connexes