我在Excel中编写VBA相对较新。在Excel工作表中,我在多个列的单行中发生了事件。这些事件仅仅通过它们的颜色来表示(除了它们是空白单元格)。想象一下,细胞A1到G1的颜色为红色,H1到V1的颜色为蓝色。
我正在尝试编写一个子,告诉我细胞何时改变颜色。使用我当前的代码,在下面的文本中,Excel停止响应并弹出错误代码“运行时错误'-2147417848(80010108)'”。我不确定问题出在哪里。
Sub colorReader()
Set a = ActiveCell
Range("C8").Select
Dim cellColor As String
cellColor = ActiveCell.Interior.Color
MsgBox (cellColor)
Do While cellColor = "13408767"
a = ActiveCell.Offset(, 1)
If cellColor <> "13408767" Then
MsgBox ("end color")
End If
Loop
End Sub
答案 0 :(得分:2)
您的ActiveCell
永远不会改变。我想你想循环遍历细胞,只测试你发现的细胞颜色是否与同一行中细胞的细胞颜色不同,但只是一列。像这样
for i= 3 to 100 'or whatever your last column number happens to be
'This tests to see if the interior color of a cell is different from
'the on in the same row but the next column over
if cells(8, i).Interior.ColorIndex <> cells(8, i+1).Interior.ColorIndex then
MsgBox("color changes")
end if
next i
我猜你会想要用有用的东西替换MsgBox("color changes")
,告诉你颜色发生了什么变化,比如MsgBox("Column " & i + 1 & " had a change of color from the column immediately to the left of it.")
。
答案 1 :(得分:0)
你的细胞参考可以做一些工作,通常被认为是不好的。选择一些东西。您还需要移动范围,每次移动范围a下面的代码。试试这个:
Sub colorReader()
dim a as range
Set a = activeworksheet.Range("C8")
Dim cellColor As String
cellColor = ActiveCell.Interior.Color
MsgBox (cellColor)
Do While cellColor = "13408767"
a = a.Offset(, 1)
If cellColor <> "13408767" Then
MsgBox ("end color")
End If
Loop
End Sub