2013-05-07 108 views
2

我是在Excel中使用VBA宏的新手,我试图根据另一个单元格不为空的条件来更改单元格的背景颜色。我想我已经想通了,但是我一定是做错了,因为不管我指定'Interior.Color'改变为什么颜色,它都会将单元格变成难看的蓝色。这里是代码:VBA Excel不会将单元格更改为正确的颜色

Sub Hello() 
    MsgBox ("Hello, world!") 

    Dim shSource As Worksheet 
    Dim shDest As Worksheet 

    Set shSource = ThisWorkbook.Sheets("Box Channel Tracking") 
    Set shDest = ThisWorkbook.Sheets("Box Channel Schematic") 

    If shSource.Range("C176").Value <> "" Then 
     shDest.Range("E8").Interior.Color = RGB(255, 255, 255) 
     shDest.Range("E8").Interior.Pattern = xlSolid 
    Else 
     shDest.Range("E8").Interior.Color = Red 
     shDest.Range("E8").Interior.Pattern = xlSolid 
    End If 
End Sub 
+0

您使用的是什么版本的Excel? – datatoo 2013-05-07 15:28:41

+0

你使用任何条件格式? – 2013-05-07 16:12:00

+0

也许他们正在压倒你的VBA代码。 VBA做的是正确的事情,那么你的条件格式就会去那里并炸掉它。 – 2013-05-07 16:12:58

回答

3

你必须使用颜色的索引或适当的RGB值。更改else分支的第一行:

 shDest.Range("E8").Interior.Color = RGB(255, 0, 0) 

完整的代码示例:

Sub Hello() 
    MsgBox ("Hello, world!") 

    Dim shSource As Worksheet 
    Dim shDest As Worksheet 

    Set shSource = ThisWorkbook.Sheets("Box Channel Tracking") 
    Set shDest = ThisWorkbook.Sheets("Box Channel Schematic") 

    If shSource.Range("C176").Value <> "" Then 
     shDest.Range("E8").Interior.Color = RGB(255, 255, 255) 
     shDest.Range("E8").Interior.Pattern = xlSolid 
    Else 
     shDest.Range("E8").Interior.Color = RGB(255, 0, 0) '<-modified 
     shDest.Range("E8").Interior.Pattern = xlSolid 
    End If 
End Sub 
+0

对不起,我粘贴了我最近的修订版本,我已经使用了你在那里显示的内容,RGB(255,0,0)以及ColorIndex = 4,并尝试了几种不同的颜色,它总是给我一个深绿色的蓝色。 – zabimaru 2013-05-07 15:02:02

+0

如果没有您正在使用的实际代码,很难诊断问题。 – bernie 2013-05-07 15:03:26

+0

我的代码是他给你的确切代码 – zabimaru 2013-05-07 15:05:56

0

检查调色板Excel有没有改变
根据您的版本,你可以将其重置为一个标准的调色板

在2003年工具>选项>颜色 http://support.microsoft.com/kb/288412介绍了如何做到这一点也

或者在更高版本中,您可能会应用导致问题的自定义主题