簡體   English   中英

Excel VBA宏:如何使用列表驗證查找單元格

[英]Excel VBA macro: how do I find cells with list validation

我想要一個宏來清除工作表中給定范圍內的所有單元格,除非它具有(特別是)LIST驗證。 (在這種情況下,我要使其='選擇'。)

所以...我需要宏來:

1)檢查工作表上某個范圍內的所有單元格2)如果該單元格沒有(具體地)進行LIST驗證,將使該單元格=“” 3)如果該單元格沒有(具體地)進行LIST驗證,則將使該單元格= '選擇'

像這樣:

Dim x as variant

with thisworkbook.sheets("audits") 
For each x in .range("A6:AZ200")
    if x.validationtype = "list" then
    x.value = "Select"
    else
    x.value = ""
    end if
next x
end with

謝謝!

您可能可以使用范圍對象的SpecialCells屬性來僅返回具有驗證的單元格,然后進行另一項檢查以確保驗證類型為List。

Dim rng As Range
Dim vRng As Range
Dim cl As Range

Set rng = thisworkbook.sheets("audits").Range("A6:AZ200") 'Modify as needed

'Get a range of ONLY the validation cells
Set vRng = rng.SpecialCells(xlCellTypeAllValidation)


For Each cl In rng
    'If the cell has NO VALIDATION:
    If Intersect(cl, vRng) Is Nothing Then
        cl.ClearContents
    ElseIf cl.Validation.Type = 3 Then  'xlValidateList
        cl.Value = "Select"
    End If
Next

注意: 3是用於“列表”驗證的xlDVType常量 您也可以使用常量表達式: xlValidateList

上面的代碼應該處理混合驗證類型,並且對其他任何類型的驗證都無效。 如果可以安全地假定僅使用列表驗證,則嘗試將其壓縮為:

Set vRng = rng.SpecialCells(xlCellTypeAllValidation)
vRng.Value = "Select"

For Each cl In rng
    'If the cell has NO VALIDATION:
    If Intersect(cl, vRng) Is Nothing Then
        cl.ClearContents
    End If
Next

這將是一種方法。 為了使錯誤處理遠離您的主例程,我將驗證檢查器放入了一個獨立的函數中:

Sub clear_validation()

Dim x As Range

With ThisWorkbook.Sheets("audits")
    For Each x In .Range("A6:AZ200")
        If validationtype(x) = 3 Then
            x.Value = "Select"
        Else
            x.Value = ""
        End If
    Next x
End With

End Sub

Function validationtype(cl As Range)
    Dim t As Integer
    t = 0
    On Error Resume Next
        t = cl.Validation.Type
    On Error GoTo 0
    validationtype = t
End Function

它是閃爍的,所以您可能要暫時關閉屏幕更新,或者可能正在運行時關閉計算,但是我認為這可以滿足您的要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM