Проверка данных для получения сообщения об ошибке (вход в ячейку не совпадает с именем в списке) - PullRequest
0 голосов
/ 17 мая 2019

Я посмотрел несколько примеров для своего вопроса, но не смог найти ответ, который работает.

Справочная информация: У меня есть список элементов (скажем, яблоко, апельсин, банан) в 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

Я думал, что покажу это здесь, если кто-нибудь наткнется на мой вопрос.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 18 мая 2019

Попробуйте следующую формулу:

= НЕ (ISERROR (НАЙТИ ("-" & A1 & "-", (TEXTJOIN (, "-", TRUE, Sheet1! A1: A77)))))

Это объединяет все тексты, а затем посмотреть, есть ли в списке то, что находится в ячейке.Я помещаю его между черточками, чтобы не принимать частичные значения.

0 голосов
/ 17 мая 2019
  • Выберите ячейки, в которые вы хотите поместить проверку данных
  • Выбрав ячейки, перейдите на вкладку «Данные» -> Проверка
  • Установите «Разрешить» на «Список» и установите Источник на =Liste, как показано здесь:

Data Validation List screenshot

  • Затем перейдите на вкладку «Предупреждение об ошибке» и установите для «Стиль» значение «Предупреждение» и введите нужный текст в «Заголовок» и «Сообщение об ошибке», как показано здесь:

Data Validation Error Alert screenshot

Проверьте это. Теперь у вас должен быть раскрывающийся список допустимых вариантов, и если вы попытаетесь вручную ввести неверный вариант, вы получите указанное вами сообщение об ошибке.

В качестве примечания: если вы хотите, чтобы проверка данных полностью запрещала / запрещала любую запись, отсутствующую в списке, вам необходимо установить для параметра «Предупреждение об ошибке -> стиль» значение «Стоп» вместо «Предупреждение».

EDIT

В комментариях это не может быть выпадающий список. Я настоятельно рекомендую использовать выпадающий список для этого, потому что это будет наиболее эффективный способ сократить время ввода данных, а также уменьшить количество ошибок при опечатках. Однако, если это не может быть раскрывающийся список, вы можете использовать пользовательскую проверку данных и установить формулу на =ISNUMBER(MATCH(B7,Liste,0)) (здесь мы используем B7, потому что это первая ячейка в диапазоне ячеек, содержащая проверка данных).

Data Validation Custom screenshot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...