[英]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.