我创建了一个自定义下拉数据验证列表,我可以在其中选择多个值。下拉列表中的这些值会根据需要更改(在工作表列X中定义)。
当我从下拉列表中选择其中一个值(假设为Y)然后通过删除最后插入的值(从列X中删除Y值)更新数据验证时,会出现问题。通过这样做,工作表中的值Y不再有效,所以我想知道是否有办法获取具有无效数据的单元格的列表(数组或字符串)。
我在几个网站上搜索并阅读了类似的问题,但我找不到任何有用的东西。我考虑循环所有单元格并检查该值是否有效,但由于我有大量数据,我认为这不是最好的方法。
由于Excel已经用红色圆圈标记这些无效数据,也许有可能获得那些标记单元格的地址? 提前致谢!
答案 0 :(得分:4)
在工作表中获取无效单元格的正确方法是使用Cells.SpecialCells(xlCellTypeAllValidation)
。
通过使用Microsoft KB213773 (Q213773) - "How to create data validation circles for printing in Excel"中的一些信息,类似的Sub
可用于循环所有无效的单元格,然后更改其值(或将其标记为将来编辑)。
Sub CorrectInvalidValues()
Dim data_range As Range
Dim invalid_cell As Range
Dim count As Integer: count = 0
Dim nr_invalid As Integer: nr_invalid = 0
Dim new_value As String
'If an error occurs run the error handler and end the procedure
On Error GoTo errhandler
Set data_range = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo 0
' Loop through each cell that has data validation and gets the number of invalid cells
For Each invalid_cell In data_range
If Not invalid_cell.Validation.Value Then
nr_invalid = nr_invalid + 1
End If
Next
' Editing each value
For Each invalid_cell In data_range
If Not invalid_cell.Validation.Value Then
count = count + 1
Application.Goto reference:=invalid_cell, Scroll:=True
new_value = Application.InputBox("Please insert a correct value.", "Invalid Data " & count & "/" & nr_invalid)
If Not (new_value = "False") Then
invalid_cell.Interior.ColorIndex = 0
invalid_cell.Value = new_value
Else
invalid_cell.Interior.Color = RGB(255, 0, 0)
invalid_cell.Value = "<PLEASE EDIT>"
End If
End If
Next
Exit Sub
errhandler:
MsgBox "There are no cells with data validation on this sheet."
End Sub