Проблема с динамическими цветами вкладок - PullRequest
0 голосов
/ 10 декабря 2018

Я пробовал различные итерации из приведенного ниже, и некоторые работали сначала, а потом не после, некоторые вообще не работали.

В короткой ячейке 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: автоматически настраивать цвет вкладки

Он не будет отображаться как макрос, пока у меня есть «ByVal Target As Range» между () в первой строке,Но если я уберу его, это не сработает.

Один раз он работал правильно, но затем не изменил цвет ячейки и выдал ошибку (это было пару часов назад, поэтому не могу вспомнить сообщение извините).

Возможно, это что-то очень простое, но, увы, мои знания таковы.

Может кто-нибудь указать мне правильное направление, пожалуйста ?.

************** РЕДАКТИРОВАТЬ / ОБНОВИТЬ **********************

Текущий код любезно предоставлен Дарреном:

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, если это те цвета, но они все те же?Никакие цветовые значения не вносят этих изменений, и текст, попадающий в поле, является правильным, поскольку я теперь добавил это также для проверки данных (используя список на другой вкладке).Я заканчиваю выпадающий сейчас, и для 3 из 6 он работает нормально ???.

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Попробуйте

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
0 голосов
/ 10 декабря 2018

Два способа сделать это - оба используют событие 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...