如何将文本框值设置为变量以在匹配函数 VBA 中使用

问题描述

我想让用户用户表单的文本框中输入一个字符串。然后我想将该值与表中的范围进行比较。

我尝试将文本框值设置为一个变量,它告诉我“需要对象”。

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