VBA的以下位將強調所有細胞與數據驗證錯誤表:檢查Excel 2003中的數據驗證
Sub CheckValidation(sht As Worksheet)
Dim cell As Range
Dim rngDV As Range
Dim dvError As Boolean
On Error Resume Next
Set rngDV = sht.UsedRange.SpecialCells(xlCellTypeAllValidation)
On Error GoTo 0
If rngDV Is Nothing Then
sht.ClearCircles
Else
dvError = False
For Each cell In rngDV
If Not cell.Validation.Value Then
dvError = True
Exit For
End If
Next
If dvError Then
sht.CircleInvalid
sht.Activate
Else
sht.ClearCircles
End If
End If
End Sub
然而,「對於每一個」循環運行非常緩慢地張着大量的數據驗證。
有誰知道避免「For Each」循環或以某種方式加速的方法嗎?
我本來以爲下面將相當於設定「dvError」的值:
dvError = Not rngDV.Validation.Value
但由於某些原因,即使有數據驗證錯誤rngDV.Validation.Value是真實的。
感謝MikeD,我有相當多的數據驗證單元(猜測,成千上萬?),延遲相當明顯。我已經介紹了代碼,for循環確實是罪魁禍首。我認爲衆所周知,任何以逐個單元爲基礎運行的代碼比使用批量操作要慢得多(參見,例如http://www.ozgrid.com/VBA/VBALoops.htm)。 – mpeac 2010-09-29 12:46:11