Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wenn in Toleranz dann Farbe

Forumthread: Wenn in Toleranz dann Farbe

Wenn in Toleranz dann Farbe
02.03.2021 08:27:48
Lars
Hallo Community,
ich habe leider noch das Problem, dass ich bei meinem VBA-Programm in Zeile 7 folgenden Fehler bekomme:
Laufzeitfehler '13':
Typen unverträglich
Ich bekomme diesen leider nicht weg. Kann mir einer evtl. sagen wo mein Fehler ist?
Folgendes will ich als Endergebnis:
Wenn in Spalte N eine eine Zahl ist, dann in Spalte A prüfen welche Toleranz gilt und dementsprechend die Zeile einfärben.
Wenn Spalte N leer ist, diese auch leer lassen.
Mit einer bedingten Formatierung komme ich da leider nicht weiter, da ich ca. 10 verschiedene Toleranzbereiche habe (grün, gelb & rot).
Grün kann z.B. ein von -5 bis 5 gehen, mal von -2 bis 2 oder -3 bis 0.
Und wenn in Spalte N eine Zeile leer ist, bleibt die auch nicht unformatiert.
Hier mal eine Beispieldatei:
https://www.herber.de/bbs/user/144362.xlsm
Vielen Dank schonmal im voraus für Eure Hilfe.
Gruß
Lars

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wenn in Toleranz dann Farbe
02.03.2021 08:55:32
Nepumuk
Hallo Lars,
teste mal:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim lngColor1 As Long
    Dim lngColor2 As Long
    Dim objRange As Range, objCell As Range
    
    Set objRange = Intersect(Target, Range("N11:N40000"))
    
    If Not objRange Is Nothing Then
        
        For Each objCell In objRange
            
            Select Case objCell.Offset(0, -13)
                    
                Case "K123456", "K234567", "K345678", "K456789"
                    
                    If IsNumeric(objCell.Value) Then
                        
                        Select Case objCell.Value
                                
                            Case -5 To 5
                                lngColor1 = vbGreen
                                lngColor2 = vbBlack
                            Case -10 To -6, 6 To 10
                                lngColor1 = vbYellow
                                lngColor2 = vbBlack
                            Case Is < -10, Is > 10
                                lngColor1 = vbRed
                                lngColor2 = vbBlack
                                
                        End Select
                    End If
                    
                Case "K555555", "K555556", "555557", "555558"
                    
                    If IsNumeric(objCell.Value) Then
                        
                        Select Case objCell.Value
                                
                            Case -2 To 2
                                lngColor1 = vbGreen
                                lngColor2 = vbBlack
                            Case -5 To -3, 3 To 5
                                lngColor1 = vbYellow
                                lngColor2 = vbBlack
                            Case Is < -5, Is > 5
                                lngColor1 = vbRed
                                lngColor2 = vbBlack
                                
                        End Select
                    End If
            End Select
            
            objCell.Interior.Color = lngColor1
            objCell.Font.Color = lngColor2
            
        Next
        
        Set objRange = Nothing
        
    End If
End Sub

Gruß
Nepumuk

Anzeige
Nachtrag
02.03.2021 09:01:48
Nepumuk
Benutze an Stelle von:
If IsNumeric(objCell.Value) Then
besser:
If IsNumeric(objCell.Text) Then
denn die Value-Eigenschaft gibt, wenn die Zelle leer ist, eine 0 zurück.
Gruß
Nepumuk

AW: Nachtrag
02.03.2021 09:38:03
Lars
Hallo Nepumuk,
vielen Dank, das hat mich schonmal ein ganzes Stück weiter gebracht.
Die Toleranzen werden in der entsprechenden Farbe eingefärbt.
Nur wenn in Spalte N nichts steht, dann wird da eine 0 eingefügt und die Zelle wird eingefärbt.
In der Zelle sollte nichts stehen und diese sollte keine Farbe erhalten.
Was ich vergessen habe zu erwähnen:
Es gibt in der Spalte A auch Nummern/Texte (im Beispiel K987654), bei diesen soll in Spalte N nicht eingefärbt werden.
Folgend die geänderte Beispieldatei:
https://www.herber.de/bbs/user/144365.xlsm
Danke & Gruß
Lars

Anzeige
AW: Nachtrag
02.03.2021 09:51:58
Nepumuk
Hallo Lars,
so besser?
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim objRange As Range, objCell As Range
    
    Set objRange = Intersect(Target, Range("N11:N40000"))
    
    If Not objRange Is Nothing Then
        
        For Each objCell In objRange
            
            Select Case objCell.Offset(0, -13)
                    
                Case "K123456", "K234567", "K345678", "K456789"
                    
                    If IsNumeric(objCell.Text) Then
                        
                        Select Case objCell.Value
                                
                            Case -5 To 5
                                objCell.Interior.Color = vbGreen
                                objCell.Font.Color = vbBlack
                            Case -10 To -6, 6 To 10
                                objCell.Interior.Color = vbYellow
                                objCell.Font.Color = vbBlack
                            Case Is < -10, Is > 10
                                objCell.Interior.Color = vbRed
                                objCell.Font.Color = vbBlack
                            Case Else
                                objCell.Interior.Pattern = xlPatternNone
                                
                        End Select
                    Else
                        objCell.Interior.Pattern = xlPatternNone
                    End If
                    
                Case "K555555", "K666666", "K777777", "K888888"
                    
                    If IsNumeric(objCell.Text) Then
                        
                        Select Case objCell.Value
                                
                            Case -2 To 2
                                objCell.Interior.Color = vbGreen
                                objCell.Font.Color = vbBlack
                            Case -5 To -3, 3 To 5
                                objCell.Interior.Color = vbYellow
                                objCell.Font.Color = vbBlack
                            Case Is < -5, Is > 5
                                objCell.Interior.Color = vbRed
                                objCell.Font.Color = vbBlack
                            Case Else
                                objCell.Interior.Pattern = xlPatternNone
                                
                        End Select
                    Else
                        objCell.Interior.Pattern = xlPatternNone
                    End If
            End Select
        Next
        
        Set objRange = Nothing
        
    End If
End Sub

Gruß
Nepumuk

Anzeige
AW: Nachtrag
02.03.2021 10:00:51
Lars
Hallo Nepumuk,
vielen Dank für deine schnellen Rückmeldungen.
Aber leider nein.
Das Programm färbt mir bei K987654 und bei leeren Zellen, die Zelle gelb.
Gruß
Lars

AW: Nachtrag
02.03.2021 10:24:11
Lars
Hallo Herbert_Grom,
Vielen Dank für deine Rückmeldung.
Bei deinem Code löscht er mir leider in Spalte N alles raus, was nicht zu den genannten Bedingungen (Spalte A) gehört.
Nepumuk hat mir parallel zu dir noch einen geschickt, welcher super funktioniert.
Trotzdem vielen Dank.
Gruß
Lars

Anzeige
AW: Nachtrag
02.03.2021 10:13:29
Nepumuk
Hallo Lars,
jetzt immer noch?
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim objRange As Range, objCell As Range
    
    Set objRange = Intersect(Target, Range("N11:N40000"))
    
    If Not objRange Is Nothing Then
        
        For Each objCell In objRange
            
            Select Case objCell.Offset(0, -13).Value
                    
                Case "K123456", "K234567", "K345678", "K456789"
                    
                    If IsNumeric(objCell.Text) Then
                        
                        Select Case objCell.Value
                                
                            Case -5 To 5
                                objCell.Interior.Color = vbGreen
                                objCell.Font.Color = vbBlack
                            Case -10 To -6, 6 To 10
                                objCell.Interior.Color = vbYellow
                                objCell.Font.Color = vbBlack
                            Case Is < -10, Is > 10
                                objCell.Interior.Color = vbRed
                                objCell.Font.Color = vbBlack
                            Case Else
                                objCell.Interior.Pattern = xlPatternNone
                                
                        End Select
                    Else
                        objCell.Interior.Pattern = xlPatternNone
                    End If
                    
                Case "K555555", "K666666", "K777777", "K888888"
                    
                    If IsNumeric(objCell.Text) Then
                        
                        Select Case objCell.Value
                                
                            Case -2 To 2
                                objCell.Interior.Color = vbGreen
                                objCell.Font.Color = vbBlack
                            Case -5 To -3, 3 To 5
                                objCell.Interior.Color = vbYellow
                                objCell.Font.Color = vbBlack
                            Case Is < -5, Is > 5
                                objCell.Interior.Color = vbRed
                                objCell.Font.Color = vbBlack
                            Case Else
                                objCell.Interior.Pattern = xlPatternNone
                                
                        End Select
                    Else
                        objCell.Interior.Pattern = xlPatternNone
                    End If
                Case Else
                    objCell.Interior.Pattern = xlPatternNone
            End Select
        Next
        
        Set objRange = Nothing
        
    End If
End Sub

Gruß
Nepumuk

Anzeige
AW: Nachtrag
02.03.2021 10:25:13
Lars
Hallo Nepumuk,
jetzt funktioniert alles Einwandfrei.
Vielen Dank für die schnelle Hilfe.
Ich wünsche noch einen schönen Tag.
Gruß und vielen vielen Dank
Lars
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige