2013-09-05 3 views
4

Я пишу код VBA, который проходит через диапазон ячеек, проверяющих, имеет ли каждая ячейка валидацию данных (выпадающее меню) и если она не назначается ей из списка на другом листе.Определить, содержит ли ячейка валидацию данных

У меня в настоящее время возникают проблемы с линией, которая проверяет, имеет ли текущая ячейка уже проверка данных. Я получаю ошибку 1004 «никакие ячейки не были найдены».

Sub datavalidation() 

    Dim nlp As Range 
    Dim lrds As Long 
    Dim wp As Double 
    Dim ddrange As Range 

    Sheets("DataSheet").Select 

     lrds = ActiveSheet.Range("A1").Offset(ActiveSheet.rows.Count - 1, 0).End(xlUp).Row 

     Set nlp = Range("I3:I" & lrds) 

     For Each cell In nlp 

    'error on following line 

      If cell.SpecialCells(xlCellTypeSameValidation).Cells.Count < 1 Then 
       wp = cell.Offset(0, -8).Value 

       Set ddrange = ddrangefunc(wp) 

      End If 

     Next 

End Sub 

Любые идеи? Спасибо

ответ

8
Dim cell As Range, v As Long 

For Each cell In Selection.Cells 
    v = 0 
    On Error Resume Next 
    v = cell.SpecialCells(xlCellTypeSameValidation).Count 
    On Error GoTo 0 

    If v = 0 Then 
     Debug.Print "No validation" 
    Else 
     Debug.Print "Has validation" 
    End If 
Next 
+0

Ответ Тима должен быть хорошим для вас, но вы можете ограничить обработчик ошибок предоставлением ответа на этот конкретный номер ошибки. – dennythecoder

1

Если вы хотите, чтобы проверить ActiveCell, то:

Sub dural() 
    Dim r As Range 
    On Error GoTo noval 
    Set r = Cells.SpecialCells(xlCellTypeAllValidation) 
    If Intersect(r, ActiveCell) Is Nothing Then GoTo noval 
    MsgBox "Active cell has no validation." 
    Exit Sub 
noval: 
    MsgBox "Active cell has no validation." 
    On Error GoTo 0 
End Sub 
+0

Если вы действительно заинтересованы в проверке правильности проверки одной ячейки, это самый эффективный способ ее выполнения. Если вы проверяете все ячейки на листе, это может быть изменено для получения диапазона r один раз, затем циклически перебирайте перекрестки каждой ячейки и диапазон r, чтобы добавить проверку на ячейки, которые ее не имеют. – GlennFromIowa

0

Это работает для меня

Sub test() 
    On Error Resume Next 
     If ActiveCell.SpecialCells(xlCellTypeSameValidation).Cells.Count < 1 Then 
      MsgBox "validation" 
     Else 
      MsgBox "no Validation" 
     End If 
    On Error GoTo 0 
End Sub 
8

Я знаю, этот вопрос стар, но поскольку речь идет когда Googling «excel vba проверяет, имеет ли ячейка валидацию», я подумал, что добавлю свое зерно соли.

Если объект Range, по которому вы звоните SpecialCells, представляет собой только одну ячейку, весь лист будет отсканирован, чтобы найти совпадения. Если у вас очень большой объем данных, методы, приведенные в предыдущих ответах, могут немного замедлить работу.

Следовательно, здесь является более эффективным способом, чтобы проверить, если одна клетка имеет подтверждение:

Function HasValidation(cell As Range) As Boolean 
    Dim t: t = Null 

    On Error Resume Next 
    t = cell.Validation.Type 
    On Error GoTo 0 

    HasValidation = Not IsNull(t) 
End Function 
+1

Это должен быть принятый ответ ... –

0

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

Dim cell as Range 
Dim rng as Range 
Set rng = Range("A1:A10") 'enter your range 

On Error Resume Next 'will skip over the cells with no validation 

For Each cell In rng 
    msgbox cell.Validation.Formula1 
Next cell 
0

Около 4 лет спустя, я также ищу проверку ячейки. Объединив несколько из ответов здесь, это то, что я придумал: это то, что я придумал:

Option Explicit 

Public Sub ShowValidationInfo() 

    Dim rngCell    As Range 
    Dim lngValidation  As Long 

    For Each rngCell In ActiveSheet.UsedRange 

     lngValidation = 0 

     On Error Resume Next 
     lngValidation = rngCell.SpecialCells(xlCellTypeSameValidation).Count 
     On Error GoTo 0 

     If lngValidation <> 0 Then 
      Debug.Print rngCell.Address 
      Debug.Print rngCell.Validation.Formula1 
      Debug.Print rngCell.Validation.InCellDropdown 
     End If 
    Next 

End Sub 
Смежные вопросы