2017-02-17 12 views
-1

Есть ли способ в VBA проверить, соответствует ли значение ячеек критериям проверки данных для этой ячейки? например в псевдокоде: Cell.Validation.isValidПроверьте, прошла ли проверка данных

Ситуация такова:

  • Критерии проверки представляет собой список значений в имени диапазона
  • Я сделать хотите, чтобы пользователь мог ввести что-то что нет в списке валидации
  • Списки проверок динамически построены (я мог просто пойти и проверить данные, которые были использованы для построения списков, но hey, Формула проверки уже выполнена AINS данные, так что я интересно знать, если он может быть использован без переработки кода)
  • Я хочу, чтобы проверить это после того, как пользователь ввел данные, не в то время как они делают это
+0

Этот вопрос * слишком широкий *. Есть много способов проверить данные, подобные этому, и без какого-либо кода, который вы попробовали/что-то, что не работает, мы не сможем дать вам конкретные ответы. Если вам просто интересно что-то, это, вероятно, не место, чтобы спросить. Если у вас есть конкретный вопрос, который является [Минимальным, полным и проверяемым примером] (https://stackoverflow.com/help/mcve), тогда мы можем ответить на него. – CallumDA

+0

Не видя более конкретного примера, мы не можем обеспечить очень эффективный метод выполнения этого. Моя лучшая рекомендация, однако, будет заключаться в том, чтобы проверить введенное значение на массив значений, загрузив именованный диапазон в массив и затем перейдя через него. Хотя это не самый эффективный метод, он все равно должен работать в считанные секунды (если не микросекунды). –

ответ

1

Этот код вероятно, полный дыр, но я нашел, что это сработало для меня.

enter image description here

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim rRange As Range 

    If Target.Cells.Count = 1 Then 
     If Not (IsEmpty(Target.Validation.Formula1)) Then 
      Set rRange = ThisWorkbook.Names(Replace(Target.Validation.Formula1, "=", "")).RefersToRange 
      MsgBox "Is In Range:=" & Not rRange.Find(Target.Value, rRange.Cells(1), xlValues, xlWhole) Is Nothing 
     End If 
    End If 

End Sub 
+0

Хорошая идея, спасибо – Absinthe