动态标签颜色问题

时间:2018-12-10 13:21:11

标签: excel vba excel-vba

我尝试了下面的各种迭代,有些迭代是第一次工作,然后没有,有些根本没有。

在所有工作表上的短单元格b2中,可以是6个文本条目之一(已完成,进行中,报废,将来的作品,已存放,保留),以显示该特定作品的现时状态。为了一目了然地提供更多帮助,我也希望基于b1更新标签颜色,即如果B2正在进行绿色,则该标签也是如此。

当前代码:

Private Sub tabcolour_Change(ByVal Target As Range)

             Select Case Range("$b$2").Value
            Case "In progress"
                .Color = 43
            Case "Held"
                .Color = 6
            Case "Scrapped"
                .Color = 3
            Case "Parked"
                .Color = 28
            Case "Complete"
                .Color = 55
            Case "Future Works"
                .Color = 53
            Case Else
                .ColorIndex = xlColorIndexNone
        End Select
    End With
End Sub

我仍然对其进行了少许更新。我在下面使用的文章。

Excel VBA: automatically adjust tab colour

当我在第一行()之间有“ ByVal Target As Range”时,它将不会被视为宏。但是,如果我将其删除,将无法正常工作。

它一次可以正常工作,但是之后没有更改单元格的颜色并引发了错误(这是几个小时前的事,所以记不起消息了)。

这可能是非常基本的东西,但是我的知识也是如此。

有人可以指出我正确的方向吗?

**************编辑/更新**********************

当前代码由Darren提供:

Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Range("B1"), Target) Is Nothing Then
        With ActiveSheet.Tab
               Select Case Target
                Case "In Progress"
                    .Color = RGB(153, 204, 0)
                Case "Held"
                    .Color = RGB(255, 255, 0)
                Case "Parked"
                    .Color = RGB(0, 255, 255)
                Case "Complete"
                    .Color = RGB(128, 0, 128)
                Case "Future works"
                    .Color = RGB(153, 0, 167)
                Case "scrapped"
                    .Color = RGB(194, 24, 7)

                Case Else
                    .ColorIndex = xlColorIndexNone
            End Select
        End With
    End If

End Sub

选项卡的颜色确实会更改,但是对于“进行中”,“未来有效”或“废弃”,选项卡颜色不会更改,其余的正常吗?我已经更改了RGB值,以防它们是这些颜色,但是还是一样吗?没有颜色值可以进行这些更改,并且进入框内的文本是正确的,因为我现在也已将此添加为数据验证(使用另一个选项卡上的列表)。我现在完成下拉列表,对于6个中的3个来说,它工作正常。

2 个答案:

答案 0 :(得分:0)

两种方法-都使用Change事件来监视何时在工作表上更新值。
Intersect命令检查范围B2是否已更改。

您可以将此代码添加到每个工作表中:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Range("B2"), Target) Is Nothing Then
        With Target.Parent.Tab
            Select Case Target
                Case "In Progress"
                    .Color = 43
                Case "Held"
                    .Color = 6
                Case "Parked"
                    .Color = 28

                Case Else
                    .ColorIndex = xlColorIndexNone
            End Select
        End With
    End If

End Sub

,或者您可以将此代码添加到ThisWorkbook模块中:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    If Not Intersect(Sh.Range("B2"), Target) Is Nothing Then
        With Sh.Tab
            Select Case Target
                Case "In Progress"
                    .Color = 43
                Case "Held"
                    .Color = 6
                Case "Parked"
                    .Color = 28

                Case Else
                    .ColorIndex = xlColorIndexNone
            End Select
        End With
    End If

End Sub

答案 1 :(得分:0)

尝试

Private Sub worksheet_Change(ByVal Target As Range)
        Dim myTab As Object
        Set myTab = ActiveSheet.Tab
        With myTab
             Select Case Range("$b$2").Value
            Case "In progress"
                .ColorIndex = 43
            Case "Held"
                .ColorIndex = 6
            Case "Scrapped"
                .ColorIndex = 3
            Case "Parked"
                .ColorIndex = 28
            Case "Complete"
                .ColorIndex = 55
            Case "Future Works"
                .ColorIndex = 53
            Case Else
                .ColorIndex = xlColorIndexNone
            End Select
        End With

End Sub