Neulackieren einer Zelle mit Excel VBA

Problem

Ich schreibe einen Code in Excel VBA, um einen Bericht zu erstellen. Ich bin völlig neu in VBA. Hier ist mein Code

 Private Sub CommandButton1_Click () Dim a1 As Integer Dim d1 As Integer Dim r1 As Integer a1 = Sheet1.Cells (2, 3) d1 = a1 8 r1 = a1 Mod 8 Wenn d1> = 5, dann Sheet1.Cells.Range ("A20 : E20 "). Interior.Color = vbBlack Else For cnt = 1 To d1 Sheet1.Cells (20, cnt) .Interior.Color = vbBlack Next cnt If r1 0 Then Sheet1.Cells (20, cnt) .Interior.Color = vbBlack Sheet1.Cells (20, cnt) .Font.Color = vbWhite Sheet1.Cells (20, cnt) = (8 - r1) End If End If End Sub 

Die Grundidee ist, Zellen nach dem Klicken auf die Befehlsschaltfläche basierend auf dem Wert in Cells (2, 3) einzufärben. Zellen werden basierend auf Vielfachen von 8 eingefärbt. Das Problem, dem ich gegenüberstehe, ist, dass die Zellen die Farbe dauerhaft beibehalten.

Zum Beispiel basierend auf dem Wert in Zellen (2, 3), wenn 5 Zellen gefärbt werden, bleiben sie dauerhaft dort. Wenn ich den Wert in Zellen (2, 3) ändere und auf die Befehlsschaltfläche klicke, findet kein Neulackieren von Zellen statt. Kann jemand mich bitte in dieser Hinsicht führen?

Lösung

Versuchen Sie dies am Anfang des Codes. Dadurch werden alle Zellen im Arbeitsblatt gelöscht, die farbig sind.

 Cells.Select Selection.Interior.ColorIndex = xlNone Cells (2, 3) .Select Private Sub CommandButton2_Click () Dim a1 As Integer Dim d1 As Integer Dim r1 As Integer Cells.Select Selection.Interior.ColorIndex = xlNone Cells (2, 3 ) .Wählen Sie a1 = Sheet1.Cells (2, 3) d1 = a1 8 r1 = a1 Mod 8 Wenn d1> = 5, dann Sheet1.Cells.Range ("A20: E20"). Interior.Color = vbBlack Else For cnt = 1 Nach d1 Sheet1.Cells (20, cnt) .Interior.Color = vbBlack Weiter cnt Wenn r1 0 Dann Sheet1.Cells (20, cnt) .Interior.Color = vbBlack Sheet1.Cells (20, cnt) .Font.Color = vbWhite Sheet1.Cells (20, cnt) = (8 - r1) End If End If End Sub 

Hinweis

Danke an Helper für diesen Tipp im Forum.

Vorherige Artikel Nächster Artikel

Top-Tipps