0

请帮助我,我不知道如何在 vba 编码中使用颜色。我会尽量简单地解释这一点。

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

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

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

我希望宏将第 14 个单元格更改为另一种颜色 3 次。

感谢所有的帮助。

4

2 回答 2

1

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

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

ActiveCell.Interior.ColorIndex = 36 

或者你可以使用颜色:

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

您可以在Chip Pearson 关于在 Excel VBA 中使用颜色的优秀文章中阅读此内容

于 2013-04-24T09:12:44.910 回答
1

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

但是,将单元格设置为具有不同颜色的格式不会触发更改事件,因此仅更改单元格填充不会触发任何宏。

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

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

因此,如果单元格包含一个值,例如 1,则设置条件格式。如果它是 1,则将其设置为蓝色并填充蓝色背景。这样,号码将不可见。

然后使用这个宏(右击Sheet选项卡,点击“查看代码”,将代码粘贴到代码窗口中)

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
于 2013-04-24T10:23:11.263 回答