2016-08-18 125 views
0

我希望這可以相當容易地回答。我有一個userformtextboxcommand button用作密碼輸入。查找並選擇範圍內的值

我想知道的是,我可以將wrap/edit下面的宏轉換成if語句,該語句檢查輸入到textbox1中的值是否在第一個範圍內?如果列表中的值爲IS則運行下面的宏,如果不是則返回錯誤消息。這將提交command button

Dim FindString As String 
Dim Rng As Range 
FindString = Password.TextBox1.Value 
If Trim(FindString) <> "" Then 
    With Sheets("CC Number").Range("A:A") 
     Set Rng = .Find(What:=FindString, _ 
         After:=.Cells(.Cells.Count), _ 
         LookIn:=xlValues, _ 
         LookAt:=xlWhole, _ 
         SearchOrder:=xlByRows, _ 
         SearchDirection:=xlNext, _ 
         MatchCase:=False) 
     If Not Rng Is Nothing Then 
      Application.Goto Rng, True 
     Else 
     End If 
    End With 
End If 
+0

你怎麼會知道'textbox1'的輸入已經進入?如果密碼總是有一定的長度,但用戶可以通過按提交按鈕來告訴密碼確實輸入了密碼,這可能會起作用。一種可能性是禁用提交按鈕,並檢查輸入爲密碼的字符是否在您的範圍內('KeyUp'來觸發搜索)。如果密碼在您的列表中,請啓用提交按鈕。 – CMArg

回答

1

這可能接近您的需求。當用戶窗體初始化時,提交按鈕被禁用。當用戶開始輸入他/她的密碼時,您會檢查是否在名爲「密碼」的工作表中註冊了輸入內容。如果輸入的字符在列表中,則提交按鈕處於啓用狀態。提交按鈕將運行您的代碼。 :我添加了else聲明,對disableling提交按鈕,否則(和臨界Exit Sub,我在我的第一個答案忘了)。而且,只是爲了好玩,你可以在下添加一個標籤(Label1)到輸入文本框供用戶意識到什麼,打字時發生的事情......

Private Sub UserForm_Initialize() 
CommandButton1.Enabled = False 
End Sub 

Private Sub TextBox1_Change() 
Dim sPW As String 
Dim lLastRowPasswords As Long 
Dim i As Integer 

lLastRowPasswords = Worksheets("Passwords").Cells(Rows.Count, 1).End(xlUp).Row 
sPW = TextBox1.Text 

For i = 1 To lLastRowPasswords 
    If Worksheets("Passwords").Cells(i, 1).Value = sPW Then 
     CommandButton1.Enabled = True 
     Label1.Caption = "Got it!" 
     Label1.Font.Bold = True 
     Label1.ForeColor = RGB(0, 102, 0) 
     Exit Sub 
    Else 
     CommandButton1.Enabled = False 
     Label1.ForeColor = RGB(179, 0, 0) 
     Label1.Font.Bold = True 
     Label1.Caption = "Unregistered password" 
    End If 
Next i 

End Sub 
+0

完美運行非常感謝 –