2017-02-02 1 views
1

Ich habe den Code in Blatt 1 VBA-Fenster. Die Excel-Tabelle 1 in der Arbeitsmappe ist mit der Dropdown-Liste in Spalte C. Die 4 Optionen der Dropdown-Liste sind: Complete, Pending, Verpasste Deadline und Workable. Die Dropdown-Liste wird mithilfe von Blatt 2 erstellt und definiert die Methode name. Wenn ich jedoch den Wert "Complete" (Vollständig) anwähle, wird die Farbe für die gesamte Zeile nicht grün angezeigt. Wo gehe ich falsch?VBA Farbcodierung der gesamten Spalte nach Dropdown-Liste Wert

Private Sub Worksheet_Change(ByVal Target As Range) 

'to make entire row green when job is workable 
If Selection.Text = "Workable" Then 
With ActiveCell 
Range(Cells(.Row, .CurrentRegion.Column), Cells(.Row, .CurrentRegion.Columns.Count + .CurrentRegion.Column - 1)).Select 
     With Selection.Interior 
     .Pattern = xlSolid 
     .PatternColorIndex = xlAutomatic 
     .Color = 5287936 
     .TintAndShade = 0 
     .PatternTintAndShade = 0 

    End With 
    End With 

' to make entire row yellow when pending additonal information 

ElseIf Selection.Text = "Pending" Then 
With ActiveCell 
Range(Cells(.Row, .CurrentRegion.Column), Cells(.Row, .CurrentRegion.Columns.Count + .CurrentRegion.Column - 1)).Select 

    With Selection.Interior 
     .Pattern = xlSolid 
     .PatternColorIndex = xlAutomatic 
     .Color = 65535 
     .TintAndShade = 0 
     .PatternTintAndShade = 0 

    End With 
    End With 
'to make entire row red when job is not workable 

ElseIf Selection.Text = "Missed Deadline" Then 
With ActiveCell 
Range(Cells(.Row, .CurrentRegion.Column), Cells(.Row, .CurrentRegion.Columns.Count + .CurrentRegion.Column - 1)).Select 
With Selection.Interior 
     .Pattern = xlSolid 
     .PatternColorIndex = xlAutomatic 
     .Color = 255 
     .TintAndShade = 0 
     .PatternTintAndShade = 0 
End With 
End With 


'to make entire row light blue when job is complete 

ElseIf Selection.Text = "Complete" Then 
With ActiveCell 
Range(Cells(.Row, .CurrentRegion.Column), Cells(.Row, .CurrentRegion.Columns.Count + .CurrentRegion.Column - 1)).Select 
With Selection.Interior 
     .Pattern = xlSolid 
     .PatternColorIndex = xlAutomatic 
     .ThemeColor = xlThemeColorAccent1 
     .TintAndShade = 0.799981688894314 
     .PatternTintAndShade = 0 

End With 
End With 

MsgBox "AWESOME!YOU DID IT!" 

End If 


End Sub 

Bitte sehen Code und freundlich helfen. Ich danke dir sehr!

+0

Sie möchten nur die ganze Zeile ändern? Verwenden Sie 'EntireRow' und verwenden Sie' Target' anstatt 'Selection'. – SJR

+0

@SJR Nein, der 'Bereich (Zellen (.Row, .CurrentRegion.Column), Zellen (.Row, .CurrentRegion.Columns.Count + .CurrentRegion.Column - 1)). Wählen Sie den Operator aus, der die gewünschte Region auswählt. – Eugene

+0

@Eugene - Ich denke, es gibt auch bessere Möglichkeiten, das zu tun. – SJR

Antwort

0

auf Kommentar zu erarbeiten oben

Private Sub Worksheet_Change(ByVal Target As Range) 

'to make entire row green when job is workable 
If Target.Text = "Workable" Then 
    With Target.EntireRow 
     With .Interior 
      .Pattern = xlSolid 
      .PatternColorIndex = xlAutomatic 
      .Color = 5287936 
      .TintAndShade = 0 
      .PatternTintAndShade = 0 
     End With 
    End With 

    'etc 
0

Nabeela,

Ich würde Ihnen vorschlagen, um die bedingte Formatierung zu wechseln diese Aufgabe abzuschließen, anstatt ein Makro zu schreiben.

Sie können 4 Arten hinzufügen, eine für jede Farbe, und wählen Sie mit formelbasierten Bedingung, und fügen Sie eine Formel (N unter Berücksichtigung ist die Säule mit dem Status und 5 ist die erste Zeile der Tabelle, ersetzen Sie mit Ihrem Werte):

= $N5="Workable" 

wenn Sie brauchen oder Zustand können Sie

= (($N5="Workable")+($N5="SomethingElse")>0) 

verwenden, wenn Sie UND-Bedingung benötigen, verwenden

= ($N5="Workable")*($N5="SomethingElse") 

Wenden Sie anschließend den Stil auf die gesamte Tabelle an.

.

Anbetracht Ihres Kommentar in diesem Teil aussehen:

With ActiveCell 
    Range(Cells(.[........] 

Ich würde dies

ändern
Private Sub Worksheet_Change(ByVal Target As Range) 
Dim rng as Excel.Range 
'[...] - your code here 
With ActiveCell 
Set rng = ActiveSheet.Range(_ 
    Cells(.Row, .CurrentRegion.Column), _ 
    Cells(.Row, .CurrentRegion.Columns.Count + .CurrentRegion.Column - 1)) 
With rng.Interior 
    .Pattern = xlSolid 
    .PatternColorIndex = xlAutomatic 
    .Color = 5287936 
    .TintAndShade = 0 
    .PatternTintAndShade = 0 
End With 
'[...and so on...] 
+0

Danke @Eugene aber auch die anderen Listenwerte funktionieren nicht. Es ist nicht nur mit "komplett". Außerdem werde ich versuchen, in die bedingte Formatierung zu schauen. –

+0

@NabeelaVan Sind Sie sicher, dass Ihre benannten Bereichselemente keine führenden oder nachgestellten Leerzeichen enthalten? Erhalten Sie Treffer, wenn Sie einen Haltepunkt bei If/ElseIfs setzen? – Eugene

+0

@NabeelaVan aktualisiert meine Antwort. – Eugene

0

Try This :

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim mClr As Long 
If Target.Column <> 3 Or Target.Count > 1 Then Exit Sub 

    Select Case Target.Value 
     Case "Workable": mClr = 5287936 
     Case "Pending": mClr = 65535 
     Case "Missed Deadline": mClr = 255 
     Case "Complete": mClr = 16247773 
     Case Else: Exit Sub 
    End Select 

    With Target.EntireRow.Interior 
     .Pattern = xlSolid 
     .PatternColorIndex = xlAutomatic 
     .Color = mClr 
     .TintAndShade = 0 
     .PatternTintAndShade = 0 
    End With 
End Sub 

Um obigen Code funktioniert, wenn mehr als eine Zelle zur gleichen Zeit (zum Beispiel mittels Kopieren und Einfügen) geändert und die Farbe zu xlNone (weiß), wenn die Zelle Wert nicht in der Liste zurück:

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim mClr As Long, Rng As Range, Cel As Range 
Set Rng = Application.Intersect(Target, Columns(3)) 

If Not Rng Is Nothing Then 
    For Each Cel In Rng 
     Select Case Cel.Value 
      Case "Workable": mClr = 5287936 
      Case "Pending": mClr = 65535 
      Case "Missed Deadline": mClr = 255 
      Case "Complete": mClr = 16247773 
      Case Else: mClr = xlNone 
     End Select 

     With Cel.EntireRow.Interior 
      .Pattern = xlSolid 
      .PatternColorIndex = xlAutomatic 
      .Color = mClr 
      .TintAndShade = 0 
      .PatternTintAndShade = 0 
     End With 
    Next 
End If 
End Sub 
+0

Danke für das. Aber wissen Sie, warum die Arbeitsmappe den Code nicht erkennt. Wenn ich Alt + F8 öffne, zeigt diese Arbeitsmappe kein Makro. So kann ich das nicht ausführen. –

+0

dieser Code wird Wird automatisch ausgeführt, wenn eine einzelne Zelle in der Spalte "C" geändert wurde. Um sie zu kopieren, klicken Sie mit der rechten Maustaste auf die Registerkarte und wählen Sie "Code anzeigen". Fügen Sie diesen Code ein und versuchen Sie, die Zelle in der Spalte "C" zu ändern. zu einem Ihrer Werte "Workable, Pending ....." – Fadi

+1

Ja, Sie sind 100% richtig Es funktioniert. Es vermischt nur Farbe für den Vornamen in der Liste, wenn es mit einer Dropdown-Liste in Spalte C getan wird. Aber es ist immer noch ziemlich gut. Ich versuche es zum Laufen zu bringen. –

Verwandte Themen