2016-08-18 82 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

完美运行非常感谢 –