我想要一个宏来清除工作表上给定范围内的所有单元格,除非它具有(特别是)LIST验证。 (在这种情况下,我想让它='选择'。)
所以......我需要宏来:
1)检查工作表上某个范围内的所有单元格 2)如果单元格没有(特定)LIST验证,它将使单元格=“” 3)如果细胞DOES(具体地)具有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
谢谢!
答案 0 :(得分:1)
您可以使用范围对象的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
is the xlDVType
constant for "List" validation。您也可以使用常量表达式: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
答案 1 :(得分:1)
这是一种方法。为了使错误处理远离主程序,我将验证检查器放入一个独立的功能中:
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
它的闪烁,所以你可能想暂时关闭屏幕更新,也可能在它运行时进行计算,但我认为这样做会影响你的目标。