2017-01-16 4 views
0

Я не могу найти ответ на вопрос, возможно, вы можете помочь мне решить эту проблему. Я хочу изменить это VBA Script, чтобы иметь что-то вроде:Если значение изменится, измените цвет нескольких ячеек

  • если в столбце Значение изменится - запустить VBA скрипт
  • , например, если в ячейке A2 или A3 или A4 и так далее = 1 , (ячейки B2, C2, E2, H2) будут зелеными и (D2, F2, G2 и J2) будут гнить. , если А2 или A3 ...... = 2 (В2, С2,) будет зеленый, D2, F2 будет гнить

, если значение А3 изменится, чем изменение B3, C3- , если А4 изменится, изменить B4, C4 и так далее

Значения в столбце пользователь изменится "вручную"

Sub ChangeColor()

Set sht = ThisWorkbook.Worksheets("csv_vorlage")

LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row

Set MyPlage = Range("A1:A" & LastRow) 'MsgBox (MyPlage) For Each cell In MyPlage Select Case cell.Value Case Is = "1" Range("B2:F2").EntireRow.Interior.ColorIndex = 3 'red Case Is = "2" cell.EntireRow.Interior.ColorIndex = 4 'green Case Is = "3" cell.EntireRow.Interior.ColorIndex = 4 Case Is = "4" cell.EntireRow.Interior.ColorIndex = 4 Case Is = "5" cell.EntireRow.Interior.ColorIndex = 4 Case Is = "6" cell.EntireRow.Interior.ColorIndex = 4 Case Is = "7" cell.EntireRow.Interior.ColorIndex = 4 Case Is = "8" cell.EntireRow.Interior.ColorIndex = 4 Case Is = "9" cell.EntireRow.Interior.ColorIndex = 4 Case Is = "10" cell.EntireRow.Interior.ColorIndex = 4 Case Is = "11" cell.EntireRow.Interior.ColorIndex = 4 Case Is = "12" cell.EntireRow.Interior.ColorIndex = 4 Case Is = "13" cell.EntireRow.Interior.ColorIndex = 4 Case Is = "14" cell.EntireRow.Interior.ColorIndex = 4 Case Is = "15" cell.EntireRow.Interior.ColorIndex = 4 Case Is = "16" cell.EntireRow.Interior.ColorIndex = 4 Case Is = "17" cell.EntireRow.Interior.ColorIndex = 4 Case Is = "19" cell.EntireRow.Interior.ColorIndex = 4 Case Else cell.EntireRow.Interior.ColorIndex = 0 End Select Next End Sub

и как это сделать?

+0

toi уточнить, так что даже если только одна ячейка в столбце A (A2, A3 или A100) изменит ее значения, вы хотите, чтобы цвет B2, C2, E2, H2 был зеленым? что вы хотите сделать в следующий раз, когда одна из ячеек в столбце A изменит его значение? держите его зеленым? или теперь измените на другой цвет? –

+0

моя ошибка извините, если значение A3 изменится, чем изменение B3, C3 , если A4 изменится, измените B4, C4 и т. Д. – Luk

+0

Как изменится ячейка в столбце A? Я имею в виду, являются ли они результатом какой-то формулы в них или пользователь собирается изменить их «вручную»? – user3598756

ответ

0

Сначала переведите код в Worksheet_Change событие и проверьте значения только в том случае, если значение в столбце A было изменено.

Используйте Select Case, чтобы добавить несколько сценариев, которые вы хотите проверить, при изменении цвета на зеленый.

Код

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim LastRow As Long 

LastRow = Cells(Rows.Count, "A").End(xlUp).Row 

If Not Intersect(Target, Range("A1:A" & LastRow)) Is Nothing Then 
    Select Case Target.Value 
     Case "1", "2", "3", "4" '<-- put the rest of your cases here 
      Range("B" & Target.Row & ":C" & Target.Row & ",E" & Target.Row & ":H" & Target.Row).Interior.ColorIndex = 4 'green 
     Case Else 
      Range("B" & Target.Row & ":C" & Target.Row & ",E" & Target.Row & ":H" & Target.Row).Interior.ColorIndex = 0 
    End Select 
End If 

End Sub 
2

ваш рассказ не ясно, как долго, как фактические правила раскраски беспокоятся

, но так как вы разъяснены ячейки будут изменены «вручную» пользователем, то вы можете идти, как следует:

  • в "csv_vorlage" рабочий лист кода панели, поместите следующий код:

    Private Sub Worksheet_Change(ByVal target As Range) 
        If target.Column = 1 Then ChangeColor target '<--| if any changed cell is in column A then call the color handler sub 
    End Sub 
    
  • в той же кодовой панели или в любом другом модуле, поместите следующий код

    Sub ChangeColor(target As Range) 
        Dim colorIndex1 As Long, colorIndex2 As Long 
    
        Select Case target.Value 
         Case 1 
          colorIndex1 = 4 'green 
          colorIndex2 = 3 'red 
         Case 2 
          colorIndex1 = 3 'red 
          colorIndex2 = 4 'green 
    
         Case 3 To 5 
          colorIndex1 = 5 'blue 
          colorIndex2 = 6 'yellow 
    
         Case Else 
          colorIndex1 = xlColorIndexNone 
          colorIndex2 = xlColorIndexNone 
        End Select 
    
        target.Range("B1,C1,E1,H1").Interior.ColorIndex = colorIndex1 
        target.Range("D1,F1,G1,J1").Interior.ColorIndex = colorIndex2 
    End Sub 
    

, как вы видите, вы можете играть с каждым Case только изменяя colorIndex1 и colorIndex2 согласно ваша потребность

Кроме того, один Case может обрабатывать диапазон целевых значений, таких как Case 3 To 5 и т.п., и позволяет вам повторно значительно уменьшить нагрузку на набор