Как установить значение текстового поля в переменную для использования в функции соответствия 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

person PMNIServ1    schedule 26.01.2021    source источник
comment
Это казалось правильным изменением, но открыло другую проблему. Он говорит, что не может получить свойство Match класса функций рабочего листа.   -  person PMNIServ1    schedule 26.01.2021
comment
Есть ли лучший способ использовать ошибку в качестве совпадения T/F?   -  person PMNIServ1    schedule 26.01.2021


Ответы (1)


Если вы хотите, чтобы 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
person Warcupine    schedule 26.01.2021
comment
Находка мне нравится больше. Когда я запускаю это, я получаю несоответствие типов при установке c = userfom1.textbox1... - person PMNIServ1; 26.01.2021
comment
Хех, надо починить сейчас. Должен был протестироваться с реальным текстовым полем, я предполагал, что это сработает. - person Warcupine; 26.01.2021
comment
Неважно. Я повторно вставил и попробовал еще раз, и он работает нормально. Спасибо. - person PMNIServ1; 26.01.2021