2013-06-08 3 views
0

Мне нужно понять, почему мой код не riesce изменить цвет фона ячейки (и я не хочу использовать условное форматирование)Excel VBA не Ставить ячейки цвета

Function myCheck(ToVerify As Range, RightValue As Range) As Boolean 
    Dim rng1 As Range 
    Dim rng2 As Range 

    For Each rng1 In ToVerify.Cells 
     For Each rng2 In RightValue.Cells  
      If (rng1.Value <> rng2.Value) Then 
       rng1.Interior.Color = RGB(255, 0, 0) 
       'rng1.Cells.Interior.Color = RGB(0, 255, 0) 
       'rng1.Cells.Interior.ColorIndex = 10 
       'rng1.Interior.ColorIndex = 10 
      End If 
     Next rng2 
    Next rng1 

    SignIfError = True 

End Function 

Я сделал это код для определения, какие ячейки в строке (ToVerify) не имеют одинакового значения конкретной ячейки (RightValue). Мне нужно сделать видимыми эти ячейки, тогда я решил изменить их цвет фона. Проблема в том, что Excel не меняет цвет фона этой ячейки. Я уверен, что значение ячеек удовлетворяет условию в выражении If. Линии в выражении IF, которые комментируются, являются моими другими попытками, но ни одна из них не работала.

, где я делаю неправильно?

+0

Значит ли 'RightValue' содержат более одной ячейки? –

+0

Функции Excel, в том числе определенные в VBA, возвращают только значения и не могут изменять свойства ячейки, такие как цвет. ** См. Мой [ответ] (http://superuser.com/questions/602216/how-do-you-write-an-excel-formula-that-will-paste-a-specific-value-in-a- differen/602928 # 602928) ** на вопрос пользователя SuperUser для рабочего места. – chuff

+0

@chuff, это верно только для пользовательских функций (UDF), которые, как я предполагаю, здесь не так. –

ответ

1

Я собираюсь предположить, что RightValue - это всего лишь одно значение, а не целый ряд из них. В этом случае, это может делать то, что вы хотите:

Sub myCheck(ToVerify As Range, RightValue As Variant) 
Dim cell As Range 

For Each cell In ToVerify.Cells 
    If cell.Value <> RightValue Then 
     cell.Interior.Color = RGB(255, 0, 0) 
    'else make it white 
    Else 
     cell.Interior.Color = RGB(255, 255, 255) 
    End If 
Next cell 
End Sub 

Обратите внимание, что я изменил его от Function к Sub. Поскольку вам, похоже, не требуется возвращенное значение. Я также избавился от SignIfError = True в конце, поскольку это необходимо только для Function.

Вы могли бы назвать это так:

myCheck ActiveSheet.Range("A1:A5"), 3 

Если вы хотите позвонить, используя значение в ячейке для RightValue, вы назвали бы это так:

myCheck ActiveSheet.Range("A1:A5"), ActiveSheet.Range("B1").Value 
Смежные вопросы