Excel 2007 vba if语句根据珍贵的单元格颜色填充单元格颜色

时间:2013-04-24 08:52:32

标签: excel-vba if-statement excel-2007 background-color vba

请帮助我,我不知道如何使用vba编码中的颜色。我会尽力解释这个问题。

我有从D3到AH564的单元格,它们没有任何值,永远不会。如果我将这些单元格中的颜色改为蓝色,则必须将其旁边的14个单元格(R1C14)更改为绿色,然后再将14个单元格更改为蓝色并再次变为绿色。只有三次。如果我将一个单元格更改为绿色,则执行相同的操作。

我已尝试在网站上找到的几个代码并根据我的需要对其进行修改,但所有代码都使用了值,我不知道从哪里开始使用颜色。

背景颜色如下: 蓝色(RGB)0,112,192 绿色(RGB)146,208,80

我希望宏将第14个单元格更改为其他颜色3次。

感谢所有的帮助。

2 个答案:

答案 0 :(得分:1)

您必须使用单元格的Interior属性,然后:

您可以使用ColorIndex(在Excel中使用56种“预设”颜色之一):

ActiveCell.Interior.ColorIndex = 36 

或者你可以使用Color:

Range("A1:A6").Interior.Color = RGB(0,112,192)

你可以在 Chip Pearson的 excellent article on using colors in Excel VBA

上阅读

答案 1 :(得分:1)

您可以拥有在更改单元格时触发的VBA代码。

格式化单元格以使其具有不同的颜色,但不会触发更改事件,因此只更改单元格填充不会启动任何宏。

您可以在单元格中输入数字或文本,而不是使用填充颜色格式化单元格。您可以使用条件格式,它将使用值更改单元格的颜色。

在单元格中输入文本或数字 触发更改事件,该事件可以轻松更改其他单元格的填充颜色。

因此,如果单元格包含值,请设置条件格式,例如,1。如果它是1,请将其格式化为蓝色,背景为蓝色。这样,数字将不可见。

然后使用此宏(右键单击“工作表”选项卡,单击“查看代码”并将代码粘贴到代码窗口中)

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D3:AH564")) Is Nothing Then
        If Target = 1 Then
            Target.Offset(0, 14).Interior.Color = RGB(146, 208, 80)
            Target.Offset(0, 28).Interior.Color = RGB(0, 112, 192)
            Target.Offset(0, 42).Interior.Color = RGB(146, 208, 80)
        End If
    End If

End Sub

目前尚不清楚触发器单元是否可以在整个范围内或仅在D列中。可以调整宏以适应您定义的任何内容。

编辑:

如果您将值复制并粘贴到多个单元格中,请尝试以下操作:

选项明确

Private Sub Worksheet_Change(ByVal Target As Range)
Dim cel As Range
    If Not Intersect(Target, Range("D3:AH564")) Is Nothing Then
        If Target.Rows.Count > 0 Then
            For Each cel In Target
                If cel = 1 Then
                    cel.Offset(0, 14).Interior.Color = RGB(146, 208, 80)
                    cel.Offset(0, 28).Interior.Color = RGB(0, 112, 192)
                   cel.Offset(0, 42).Interior.Color = RGB(146, 208, 80)
                End If
            Next cel
        End If
    End If

End Sub