Я посмотрел несколько примеров для своего вопроса, но не смог найти ответ, который работает.
Справочная информация:
У меня есть список элементов (скажем, яблоко, апельсин, банан) в Sheet1 (A2: A77, который уже является определенным диапазоном с именем «Liste»).
Затем я имею на другом листе (скажем, Sheet2) несколько ячеек, где появляется пользовательская форма (созданная с помощью кода VBA), где пользователь может выбрать элемент и нажать «ОК».
Однако из-за характера пользовательской формы (и списка) у вас могут быть орфографические ошибки и т. Д., И они все равно будут приняты. Поэтому я хотел бы создать проверку, где он соответствует входным данным для данного списка (чтобы пользователи не могли добавлять что-либо еще). Пользовательская форма / код специально предназначена для обеспечения возможности поиска (вместо простого списка проверки данных).
Проблема:
Я попытался создать это с помощью кода VBA, который проверяет ввод, сопоставляет его со списком Sheet1 и, если нет совпадений, показывает msgbox с утверждением. Это частично сработало (для некоторых писем, но не для других, очень странно).
Вот код, который у меня был:
Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim rSearchRng As Range
Dim vFindvar As Variant
If Not Intersect([B7:B26], Target) Is Nothing Then
Set rSearchRng = Sheet4.Range("Liste")
Set vFindvar = rSearchRng.Find(Target.Value)
If Not vFindvar Is Nothing Then
MsgBox "The Audit Project Name you have entered is not valid. Please try again!", vbExclamation, "Error!"
Selection.ClearContents
End If
End If
Application.EnableEvents = True
End Sub
Так что я думал о создании этого сообщения об ошибке с простой проверкой данных.
Проверка данных
- Я попробовал опцию «list» (и поместил ее равной названному диапазону), но это ничего не дало (окно ошибки не отображалось)
- Я попробовал "Пользовательский" со следующей формулой 'SUMPRODUCT (- (B12 = Liste)> 0) = TRUE (Я нашел это на посте, который работал для других, когда я попробовал его в ячейке, которая дала мне ожидаемые результаты «ИСТИНА / ЛОЖЬ», но все равно ничего не появляется
UPDATE
Рекомендации по проверке данных Tigeravatars работают, если у вас нет пользовательской формы (см. Комментарии ниже).
Чтобы он работал с пользовательской формой, я изменил «MatchEntry» на «ИСТИНА», а также удалил все нежелательные «события изменения» из своего кода ComboBox. Окончательный код, который я сейчас использую, приведен ниже:
Dim a()
Private Sub CommandButton2_Click()
End Sub
Private Sub UserForm_Initialize()
a = [Liste].Value
Me.ComboBox1.List = a
End Sub
Private Sub ComboBox1_Change()
Set d1 = CreateObject("Scripting.Dictionary")
tmp = UCase(Me.ComboBox1) & "*"
For Each c In a
If UCase(c) Like tmp Then d1(c) = ""
Next c
Me.ComboBox1.List = d1.keys
Me.ComboBox1.DropDown
End Sub
Private Sub CommandButton1_Click()
ActiveCell = Me.ComboBox1
Unload Me
End Sub
Private Sub cmdClose_Click()
Unload Me
End Sub
Я думал, что покажу это здесь, если кто-нибудь наткнется на мой вопрос.
Спасибо!