1

У меня есть формула для автоматического изменения цвета вкладки, которая работает, когда я вручную изменяю ячейку, но она не работает, когда ячейка заменяется функцией, обновляющей ее с другого листа: = SUM('MEDENT Proposal - Creator'!B15)Вопрос 1. Могу ли я просто изменить свой VBA, чтобы посмотреть прямо на ячейку на другом листе «MEDENT Proposal - Creator»!B15? Вопрос 2. Есть ли другой способ написать этот VBA, чтобы он автоматически обновлял цвета вкладок - неправильно написано следующее? Опять же, это работает, если я вручную изменяю ячейку "A1" в этом листе ...

Private Sub Worksheet_Change(ByVal Target As Range)
    MyVal = Range("A1").Text

    With ActiveSheet.Tab
        Select Case MyVal
            Case "0"
                .Color = vbRed
            Case "1"
                .Color = vbGreen
            Case "2"
                .Color = vbGreen
            Case "3"
                .Color = vbGreen
            Case "4"
                .Color = vbGreen
            Case "5"
                .Color = vbGreen
            Case "6"
                .Color = vbGreen
            Case "7"
                .Color = vbGreen
            Case "8"
                .Color = vbGreen
            Case "9"
                .Color = vbGreen
            Case Else
                .ColorIndex = xlColorIndexNone
        End Select
    End With
End Sub

1 ответ1

1
  1. Вы можете заставить его работать, даже если это формула, ссылающаяся на другой лист, используя вместо этого событие Worksheet_Calculate .
  2. Worksheet_Calculate не сработает, когда вы вручную измените ячейку, поэтому вам понадобятся оба, если вы хотите, чтобы оба сценария работали.
  3. Вам нужно будет вставить код в каждый модуль рабочего листа, на который вы хотите повлиять.
  4. Ты должен использовать Me.Tab вместо ActiveSheet.Tab если вы не хотите, чтобы она раскрасила любую вкладку, на которой вы, вероятно, не находитесь.
  5. Вы действительно можете сократить свой оператор Select Case если преобразуете значение в фактическое целое число.

Private Sub Worksheet_Calculate()
    ColorMyTab
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    ColorMyTab
End Sub

Private Function ColorMyTab()
    Dim myVal As Integer
    myVal = 99
    On Error Resume Next
        myVal = CInt(Range("A1").Value)
    On Error GoTo 0

    With Me.Tab
        Select Case myVal
            Case 0
                .Color = vbRed
            Case 1 To 9
                .Color = vbGreen
            Case Else
                .ColorIndex = xlColorIndexNone
        End Select
    End With
End Function

Если вы хотите, чтобы код просто отслеживал значение ячейки на листе MEDENT , вы можете написать очень похожий скрипт в коде для этого модуля рабочей таблицы. Так как он просматривает только этот лист, вам придется жестко кодировать, какие вкладки вы хотите раскрасить. Управляет ли лист MEDENT цветом для нескольких вкладок? Эти имена вкладок хранятся в столбце A:A значения, которые вы изменяете, находятся в столбце B:B? Если вы дадите нам больше информации о вашей конечной цели, мы можем порекомендовать лучшие решения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .