我有一个代码,如果它们是灰色的,则将单元格变为白色,并将该范围存储在数组中。然后我检查该数组中的每个范围,看它是否为空,图案是否为实色(白色)。如果是,那我把它变成浅灰色。我目前正在测试的代码是
Dim Prev() As Range
'I also tried Prev() As Variant and have the same problem
Dim PrevCount As Long
Dim Counter As Long
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Interior.Pattern = xlGray50 Then
Target.Interior.Pattern = xlSolid
PrevCount = PrevCount + 1
ReDim Preserve Prev(1 To PrevCount)
Set Prev(PrevCount) = Target
End If
For Counter = LBound(Prev) To UBound(Prev)
If IsEmpty(Prev(Counter)) And Prev(Counter).Interior.Pattern = xlSolid Then
Prev(Counter).Interior.Pattern = xlGray25
End If
Next
End Sub
不会发生错误,但是满足这两个条件的数组中的任何范围都不会变为灰色。我知道数组没有任何问题,因为如果我只是做
它就可以正常工作For Counter = LBound(Prev) To UBound(Prev)
If Prev(Counter).Interior.Pattern = xlSolid Then
Prev(Counter).Interior.Pattern = xlGray25
End If
Next
所以
If IsEmpty(Prev(Counter))
部分不起作用,我不确定原因。
答案 0 :(得分:1)
我怀疑IsEmpty
总是返回False
,因为只有当变量未初始化时它才会返回True
。
您需要执行其他操作,例如根据您的数据与零或空字符串进行比较。你最好检查这个
Prev(Counter) = 0
假设您正在处理数字量。这应该有用。
回顾新代码,这里有两点。 Redim Preserve会保留所有全局数据,因此在完成工作后需要将其刷新为空(Redim为0元素)。
其次,你应该尝试设置
Dim Test as Integer
Test = CInt(Prev(x).Value)
if Test = 0 Then .... so on and so forth
答案 1 :(得分:0)
请勿使用 IsEmpty()而是使用:
If Prev(Counter) = "" And Prev(Counter).Interior.Pattern = xlSolid Then
或
If cStr(Prev(Counter).Value) = "" And Prev(Counter).Interior.Pattern = xlSolid Then