2013-09-05 62 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

我知道這個問題是舊的,但因爲它來自當谷歌搜索「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

這應該是被接受的答案... –

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 
相關問題