2016-09-08 3 views
0

Я относительно новичок в написании VBA в Excel. На листе Excel у меня есть события, происходящие в одной строке по нескольким столбцам. Эти события означают только их цвет (кроме того, что это пустые ячейки). Представьте, что ячейки A1-G1 окрашены в красный цвет и от H1 до V1 окрашены в синий цвет.Ошибка обхода VBA

Я пытаюсь написать подраздел, который сообщает мне, когда ячейка меняет цвет. С моим текущим кодом, в тексте ниже, 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 

ответ

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.").

+0

Спасибо! И да, я собираюсь изменить MsgBox, я просто использовал это как контрольную точку, чтобы убедиться, что код работает правильно, прежде чем продолжить. – Andrew

+0

Добро пожаловать. Рад, что смог помочь. –

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 
Смежные вопросы