首页 文章

确定单元格是否包含数据验证

提问于
浏览
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

有任何想法吗?谢谢

6 回答

  • 0
    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
    
  • 1

    我知道这个问题已经过时了,但是当谷歌搜索“excel vba检查细胞是否有验证”时,我认为我会添加我的盐 .

    如果您调用 SpecialCellsRange 对象仅表示单个单元格,则将扫描整个工作表以查找匹配项 . 如果您有大量数据,则先前答案中提供的方法可能会变得有点慢 .

    因此,这是检查单个单元格是否具有验证的更有效方法:

    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

    如果您只想测试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
    
  • 10

    此外,如果您想获得验证 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

    这对我有用

    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
    
  • 15

    大约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
    

相关问题