2013-01-12 1 views
0

텍스트 상자 2 개, 레이블 2 개 및 로그인 단추가있는 userform이 있습니다.단추를 누를 때 Excel VBA 텍스트 상자가 0으로 재설정됩니다.

내 엑셀 시트에는 ID, 이름, 핀 및 균형이있는 데이터베이스가 있습니다.

문제는 내가 로그인 버튼을 클릭 할 때마다 ID 텍스트 상자의 값이 0으로 재설정되지만 핀 텍스트 상자가 제대로 작동합니다. 당신이 값이없는 변수를 사용하고 있기 때문에

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'는 무엇입니까? textbox reset이'txtID'를 참조한다고 말할 때? – bonCodigo

답변

0

는이 작업을 수행하는 이유는 다음과 같습니다

내가 내 전체 코드를 붙여 넣습니다. Integer이므로 0을 반환합니다.

실제로는 ID = txtID.Text이 필요합니다. 즉, txtID 텍스트 상자의 값을 가져 와서 ID 변수에 값을 저장합니다.

텍스트 상자의 Text 속성이 String이기 때문에 오류가 발생할 수 있습니다. ID = CInt(txtID.Text)을 사용해야합니다. 또한 할당 전에 txtID.Text가 Integer로 평가되는지 확인해야합니다.

+0

글쎄, 그것이 명백한 것 같습니다. 그래서 OP가 어디에서 ID에 대한 데이터를 얻고 있는지 묻는 것입니다. OP가 'PIN'이 작동하는 이유는 무엇입니까? 그의 코드를 살펴보면'PIN '에 어떤 가치도 있다고 보지 않는다. OP는 내 핀 텍스트 상자가 잘 작동한다고 말했다. * ... – bonCodigo

+0

@bonCodigo 그의 코드는 txtPin.Text를 아무 것도 설정하지 않기 때문에. –

0

여기에 표시되지 않은 코드의 어느 곳에서나 txtID에 대해 reset이 없는지 확인하십시오. 코드를 보면 아무런 값을 설정하지 않고 ID 또는 PIN ... PIN에 대해 잘 작동한다고해서 매우 호기심을 유발합니다.

Nick은 을 textboxes으로 입력하면 사람들이 IDPIN을 입력 할 수 있다고 말하면서 PIN과 비교합니다. 그러나 당신은 무엇을 비교하고 있습니까? 당신이 말했듯이 당신은 시트에 데이터베이스 종류의 구조를 가지고 있습니다. 당신은 그것을 사용하여 IDPIN assuring해야합니다.

사용자가 txtID로 양식을 통해 값을 입력 할 필요가 : 여기

내 최선 장님 추측 당신의 시트, 에 내가 가지고있는 시각화입니다. 해당 번호는 실제로 PIN이 포함 된 C 열의 경우 cell number입니다. 그런 다음 해당 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 

관련 문제