2016-11-30 2 views
0

Basierend auf einer Sprachtabelle, Spalte A = Sprache, B = Zahl, C = coloredcellZellinnere Color Index Excel VBA

Ich mag würde wissen, was die VBA ist so, wenn ich eine Nummer auf Spalte B geben (Wenn Sie Workbook_SheetChange verwenden, wird C mit dem Colorindex gleich der eingegebenen Nummer eingefärbt.

Auf der anderen Seite, und ich bin sicher, ist ein Teil der Lösung der vorherigen Frage, auf VBA wie schreibe ich cell.Interior.ColorIndex = (eine bestimmte Zelle Wert, wenn B2 = 4 -> für die Zeile , ganze oder bis letzte Spalte hat Daten, cell.Interior.ColorIndex = 4) und färbt die ganze Zeile.

Danke

Antwort

1

Die Funktion Sheetchange target als Argument hat, das ist die Zelle, die Sie geändert haben. Sie können es verwenden, um die betreffende Zelle zu ändern:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Column = 2 Then 
     Target.Offset(0,1).Interior.ColorIndex = Target.Value 
     'and for the whole row 
     Target.EntireRow.Interior.Color = Target.Offset(0,1).Interior.Color 
    Endif 
End Sub 
+0

Vielen Dank. 2. Teil fehlt, aber Danke – andnand

+0

Sie können die ganze Reihe auch bekommen, es ist normalerweise eine Frage und Antwort pro Beitrag auf dieser Seite Verstand ;-) –

+0

hinzugefügt ein bisschen, um die ganze Reihe auf die gleiche "Farbe", beachten Sie die Verwendung von ' color' statt 'colorindex' für die' gesamteRow' –

0

rechts auf den Namen des Blattes klicken, auf dem Sie diese Funktion möchten, und klicken Sie auf ‚Code anzeigen‘.

Jetzt müssen Sie eine VBA-Funktion schreiben, die bei jeder Änderung des Arbeitsblatts ausgelöst wird. Dies ist eine integrierte Funktion namens Worksheet_Change(Range). Das Bereichsobjekt (sein Argument) ist der Bereich, der sich geändert hat, als diese Funktion ausgelöst wurde.

Innerhalb der Funktion müssen Sie überprüfen, ob die geänderte Zelle in Spalte B war. Dies wird durch die Column-Eigenschaft des Target-Bereichs getan.

Jetzt müssen Sie den Wert der Zelle abrufen und ihn als ColorIndex der Zeile angeben.

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Column = 2 Then 
     ColorValue = Target.Value 
     Target.EntireRow.Interior.ColorIndex = ColorValue 
    End If 
End Sub 

Edit: Um die Zellen nur bis zum letzten Wert in der Zeile Farbe, müssen Sie die Anzahl der gefüllten Zellen in der Zeile zählen. Der folgende Code ist, dass (siehe die Kommentare zu verstehen)

Private Sub Worksheet_Change(ByVal Target As Range) 

    ' Check if the edited cell is in column B 
    If Target.Column = 2 Then 

     ' Get the value of the edited cell 
     ColorValue = Target.Value 

     ' Get the row number of the edited cell 
     RowNumber = Target.Row 

     ' Get the number of filled cells in this row 
     CellsCount = Application.WorksheetFunction.CountA(Range(RowNumber & ":" & RowNumber)) 

     ' Apply the color formatting till the last column in this row 
     Range(Cells(RowNumber, 1), Cells(RowNumber, CellsCount)).Interior.ColorIndex = ColorValue 

    End If 
End Sub 
+0

Danke, funktioniert super, wie wäre es mit einer Teilreihe, bis die letzte Spalte Daten enthält – andnand

0

Der Code von Nick Dewitt ist OK, aber es Farbe nur die Spalte C.

Wenn Sie die ganze Zeile färben möchten, starten von C abhängig davon, wie viel Spalten in der Reihe sind:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim lastcol As Integer, i As Integer 

    If Target.Column = 2 Then 
     lastcol = Cells(Target.Row, Columns.Count).End(xlToLeft).Column 
     For i = 3 To lastcol 
      Target.Offset(0, i - 2).Interior.ColorIndex = Target.Value 
     Next i 
    End If 
End Sub