问题描述
我想让用户在用户表单的文本框中输入一个字符串。然后我想将该值与表中的范围进行比较。
我尝试将文本框值设置为一个变量,它告诉我“需要对象”。
Private Sub CommandButton1_Click()
Dim NwIns As TextBox
Dim tblm As Range
Dim c As TextBox
Set tblm = Worksheets("Main Committee Database").ListObjects("CredDB").ListColumns(3).DataBodyRange
UserForm1.TextBox1.SetFocus
Set c = UserForm1.TextBox1.Value
If IsNumeric(Application.WorksheetFunction.Match(c,tblm,0)) = True Then
MsgBox "This vendor Already Exists"
Else
解决方法
如果您想要 C
作为文本框,则不能为其分配字符串值。
Dim c as Control
Set c = UserForm1.Controls("TextBox1")
或者你可以这样做
Dim c as string
c = UserForm1.TextBox1
但是如果您想对该文本框执行任何操作,例如清除它,最好只获取对象本身而不是值。
application.worksheetfunction.match
如果不匹配会出错。您可以使用错误处理代替 if 语句,但这不是处理它的好方法。更好的方法是使用 .find
然后检查它是否真的找到了任何东西。
一起:
Private Sub CommandButton1_Click()
Dim NwIns As TextBox
Dim tblm As Range
Dim c As Control
Dim fndrng As Range
Set tblm = Worksheets("Main Committee Database").ListObjects("CredDB").ListColumns(3).DataBodyRange
UserForm1.TextBox1.SetFocus
Set c = UserForm1.Controls("TextBox1")
Set fndrng = tblm.Find(c.Value,LookIn:=xlValues,lookat:=xlWhole) 'You may want to play with those parameters to meet your needs.
If Not fndrng Is Nothing Then
MsgBox "This Vendor Already Exists"
Else