Изменить цвет вкладки в соответствии с двумя разными ячейками (если выписка) - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь изменить цвет вкладки после логики if c для ячеек C32 и C46. Даже при том, что logi c работает для большинства из logi c, некоторые не дают мне правильный цвет. Я не очень знаком с VBA.

Что не работает:

C32= Fail and C46= Not Complette (brings me green instead of red)
C32= Not applicable and C46= Not Applicable (brings me red instead of gray)
C32= Not applicable and C46= Not Complete (brings me green instead of gray)
C32= Not Complete and C46= Not Complete (brings me green instead of gray)
C32= Not Complete and C46= Not Applicable (brings me red instead of gray)

Пожалуйста, помогите. Кажется простым исправить, но может найти решение

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Range("$C$32").Value = "Pass" And Range("$C$46").Value = "Pass" Or Range("$C$46").Value = "Not Complete" Then
         Me.Tab.ColorIndex = 10
    ElseIf Range("$C$32").Value = "Pass" And Range("$C$46").Value = "Not Applicable" Then
        Me.Tab.ColorIndex = 48
    ElseIf Range("$C$32").Value = "Pass" And Range("$C$46").Value = "Fail" Then
        Me.Tab.Color = vbRed
    ElseIf Range("$C$32").Value = "Fail" And Range("$C$46").Value = "Fail" Or Range("$C$46").Value = "Not Complete" Or Range("$C$46").Value = "Not Applicable" Then
        Me.Tab.Color = vbRed
    ElseIf Range("$C$32").Value = "Fail" And Range("$C$46").Value = "Pass" Then
        Me.Tab.ColorIndex = 10
    ElseIf Range("$C$32").Value = "Not Applicable" And Range("$C$46").Value = "Not Applicable" Or Range("$C$46").Value = "Not Complete" Then
        Me.Tab.ColorIndex = 48
    ElseIf Range("$C$32").Value = "Not Applicable" And Range("$C$46").Value = "Fail" Then
        Me.Tab.Color = vbRed
    ElseIf Range("$C$32").Value = "Not Applicable" And Range("$C$46").Value = "Pass" Then
        Me.Tab.ColorIndex = 10
    ElseIf Range("$C$32").Value = "Not Complete" And Range("$C$46").Value = "Not Applicable" Or Range("$C$46").Value = "Not Complete" Then
         Me.Tab.ColorIndex = 48
    ElseIf Range("$C$32").Value = "Not Complete" And Range("$C$46").Value = "Pass" Then
       Me.Tab.ColorIndex = 10
    ElseIf Range("$C$32").Value = "Not Complete" And Range("$C$46").Value = "Fail" Then
        Me.Tab.Color = vbRed
    End If

End Sub

1 Ответ

0 голосов
/ 14 февраля 2020

Некоторые замечания:

  1. Вы используете событие SelectionChange (это намерение?), Если оно есть, измените мой код, чтобы использовать его
  2. Я организовал код в Select Case Statement, который (IMO) легче читать
  3. Я добавил скобки, чтобы лучше понять опции, связанные с C46

Код:

Option Explicit

Private Sub Worksheet_change(ByVal Target As Range)
    ' Suggest that you define a range to watch when changed for this (un comment and adjust next line if you consider it)
    ' If not intersect(Target, me.Range("c32:c46")) Then Exit sub

    changeColorTab Me, LCase$(Me.Range("c32").Value), LCase$(Me.Range("c46").Value)

End Sub

Private Sub changeColorTab(ByVal targetSheet As Worksheet, ByVal c32Value As String, ByVal c46Value As String)

    Dim targetcolor As Long

    Select Case True
    Case c32Value = "pass" And (c46Value = "pass" Or c46Value = "not complete")
        targetcolor = 10 ' Green
    Case c32Value = "pass" And c46Value = "not applicable"
        targetcolor = 48 ' Dark grey
    Case c32Value = "pass" And (c46Value = "fail")
        targetcolor = 3 ' Red
    Case c32Value = "fail" And (c46Value = "fail" Or c46Value = "not complete" Or c46Value = "not applicable")
        targetcolor = 3 ' Red
    Case c32Value = "fail" And c46Value = "pass"
        targetcolor = 10 ' Green
    Case c32Value = "not applicable" And (c46Value = "not applicable" Or c46Value = "not complete")
        targetcolor = 48 ' Dark grey
    Case c32Value = "not applicable" And c46Value = "fail"
        targetcolor = 3 ' Red
    Case c32Value = "not applicable" And c46Value = "pass"
        targetcolor = 10 ' Green
    Case c32Value = "not complete" And (c46Value = "not applicable" Or c46Value = "not complete")
        targetcolor = 48
    Case c32Value = "not complete" And c46Value = "pass"
        targetcolor = 10
    Case c32Value = "not complete" And c46Value = "fail"
        targetcolor = 3 ' Red
    Case Else
        targetcolor = -4142 ' Light grey
    End Select

    targetSheet.Tab.ColorIndex = targetcolor


End Sub

Дайте мне знать, если это работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...