2012-04-16 3 views
2

У меня есть функция, которая обновляет диапазон ячеек до определенного значения после того, как пользователь изменит одну ячейку на это значение. Однако ячейки этого диапазона не используют один и тот же диапазон проверки, поэтому я хотел бы сделать отдельную проверку для каждой обновленной ячейки.Excel VBA: подтверждение значения ячейки после ее изменения

Вот что у меня есть. Для каждой ячейки валидация данных устанавливается в собственный диапазон проверки с допустимыми значениями. По какой-то причине проверка правильна, даже если данные не находятся в диапазоне проверки. Я не слишком уверен, как работает свойство validation.value ..

For index = 1 to UBound(someArray) 
    wksSomeSheet.Cells(index, column).Value = requiredValue 
    If Not wksSomeSheet.Cells(index, column).Validation.Value Then 
     MsgBox "A value is not supported for one the cells." 
     Exit For 
    End If 
Next 

Или я должен реализовать его так, что я использую Range("validationRange").find(requiredValue) вместо этого?

+2

Я думаю, что вы пытаетесь сделать это? http://siddharthrout.wordpress.com/2012/03/16/vba-data-validation-and-enforcing-it-to-work/ –

+0

Да, спасибо, это работает. Я должен был внести некоторые изменения, потому что sub уже был в изменении рабочего листа. Ваша реализация аналогична реализации значения внутри диапазона проверки. – rcell

+3

Я бы рекомендовал вам опубликовать окончательное решение, а затем принять ваш ответ :) –

ответ

2

После посмотрев на блоге Сиддхарт, я сделал некоторые минимальные изменения в его код, чтобы адаптировать его к моим потребностям:

Dim currentValidation As Excel.Validation 
wksSomeSheet.Cells(index, Target.Column).Value = requiredValue 

Set currentValidation = wksSomeSheet.Cells(index, Target.Column).Validation 
If currentValidation.Type = xlValidateList Then 
    Dim validationFound As Boolean, MyArray As Variant 
    validationFound = False 
    MyArray = Application.WorksheetFunction.Transpose(Range(Mid(currentValidation.Formula1, 1))) 
    For i = 1 To UBound(MyArray) 
     If requiredValue = MyArray(i, 1) Then 
      validationFound = True 
      Exit For 
     End If 
    Next 

    If Not validationFound Then 
     MsgBox wksSomeSheet.Cells(index, wksSomeSheet.Range("myRange").Column).Value & " does not have a valid value." 
     Exit For 
    End If 
End If 
Смежные вопросы