[Excel (VBA)] Wo ist der Fehler

Lasersword

Cadet 4th Year
Registriert
Jan. 2008
Beiträge
123
Hallo ihr VBA-Profis,

ich hab ein kleines Problem:

Da Excel bei der "Bedingten Formatierung" nur 3 Möglichkeiten bietet,
habe ich versucht, mir einen VBA-Code zusammenzubasteln.

Ich habe von VBA nicht wirklich viel Ahnung, aber der Code funktioniert :)


Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B:B")) Is Nothing Then
Else
If Target.Value = "Text1" Then
Target.Cells.Interior.ColorIndex = 3
Else
If Target.Value = "Text2" Then
Target.Cells.Interior.ColorIndex = 6
Else
If Target.Value = "Text3" Then
Target.Cells.Interior.ColorIndex = 34
Else
If Target.Value = "Text4" Then
Target.Cells.Interior.ColorIndex = 34
Else
If Target.Value = "Text5" Then
Target.Cells.Interior.ColorIndex = 3
Else
If Target.Value = "Text6" Then
Target.Cells.Interior.ColorIndex = 3
Else
If Target.Value = "Text7" Then
Target.Cells.Interior.ColorIndex = 3
Else
If Target.Value = "Text8" Then
Target.Cells.Interior.ColorIndex = 3
Else
If Target.Value = "Text9" Then
Target.Cells.Interior.ColorIndex = 34
Else
If Target.Value = "Text10" Then
Target.Cells.Interior.ColorIndex = 35
Else
If Target.Value = "Text11" Then
Target.Cells.Interior.ColorIndex = 4
Else
If Target.Value = "Text12" Then
Target.Cells.Interior.ColorIndex = 6
Else
If Target.Value = "Text13" Then
Target.Cells.Interior.ColorIndex = 6
Else
If Target.Value = "Text14" Then
Target.Cells.Interior.ColorIndex = 6
Else
If Target.Value = "Text15" Then
Target.Cells.Interior.ColorIndex = 45
Else
If Target.Value = "Text16" Then
Target.Cells.Interior.ColorIndex = 4
Else
If Target.Value = "Text17" Then
Target.Cells.Interior.ColorIndex = 4
Else
Target.Cells.Interior.ColorIndex = 0
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End Sub

Wenn ich die einzelnen Werte in der Spalte B eintrage, macht er mir auch die Formatierung.
Allerdings läuft der Befehl auf einen Fehler, wenn ich mehrere Zellen markiere und dann "Enfernen" drücke.

Laufzeitfehler '13'
Typen unverträglich

Wenn ich jetzt den Debugger starte, sagt er mir, dass der Fehler im Befehl

If Target.Value = "Text1" Then

liegt.

Wo ist der Fehler?

Vielen Dank im Voraus.
 
Hi,
Erstmal ein paar Fragen zu deiner Funktion:
1. Was genau soll die Funktion tun? Soll je nachdem Welcher Wert in einer Zelle steht eine andere Farbe gesetzt werden?
2. Was soll die Zeile(n)
If Intersect(Target, Range("B:B")) Is Nothing Then
Else If Target.Value = "Text1" Then

tun?
Da du nach dem Then-Schlüsselwort keine Anweisung gemacht hast, wird (wenn die Bedingung gültig ist) nichts ausgeführt.
Soll das so sein? Quasi das automatisch in den Else-Zweig gesprungen werden soll?


Greetings
 
Zuletzt bearbeitet:
Hallo GoTToHeat,

das hab ich verstanden.

Und wie bekomme ich das hin, dass die Formatierungen funktionieren,
ohne einen Fehler zu bekommen, wenn ich CopyandPaste, Löschen oder sonst was
mit mehreren Zellen mache?

Wie schon gesagt, ich habe von VBA sehr wenig (also eigentliche "Keine") Ahnung.

Bin für jede Hilfe dankbar.

Gruß,

Lasersword
 
Hallo Lasersword,

da du ja schreibst, dass du praktisch keine Ahnung hast, was VBA betrifft, erlaube mir einige Anmerkungen, die dir künftig helfen werden:
  1. Es ist OK, Code zu übernehmen und dann seinen eigenen Bedürfnissen anzupassen.
  2. Probiere zu verstehen, was da warum passiert (im Code)
  3. Schreibe unbedingt Kommentare in den Code, Profis wissen, warum sie davon regen Gebrauch machen
  4. Wenn du Code hier postest, dann setze ihn bitte in einen Code-Block (Die Raute # in der Symbolzeile oben).
Der Fehler tritt immer dann auf, wenn du mehrere Zellen auf einen Schlag änderst. Das muss auch schief gehen, denn die Anweisung zur Formatierung bezieht sich immer auf exakt 1 Zelle. (An alle Profis: Ich weiß ... aber so ist es verständlicher)
So, und ich habe deinen Code etwas verändert. Es geht noch viel Schicker, aber versuche erst einmal zu erkunden, wie das mit dem SELECT CASE geht. Das ist bei solchen Gelegenheiten fast schon Pflicht.

Und nun suche noch die Zeile(n), die dafür sorgen, dass nur bei Änderung von 1 Zelle in Spalte B der Code abgearbeitet wird.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("B:B")) Is Nothing Then
        'Nicht in Spalte B, also nix tun
    Else
        If Target.Cells.Count = 1 Then  'Nur 1 Zelle
            Select Case Target.Value
                Case "Text1"
                    Target.Cells.Interior.ColorIndex = 3
                Case "Text2"
                    Target.Cells.Interior.ColorIndex = 6
                Case "Text3"
                    Target.Cells.Interior.ColorIndex = 34
                Case "Text4"
                    Target.Cells.Interior.ColorIndex = 34
                Case "Text5"
                    Target.Cells.Interior.ColorIndex = 3
                Case "Text6"
                    Target.Cells.Interior.ColorIndex = 3
                Case "Text7"
                    Target.Cells.Interior.ColorIndex = 3
                Case "Text8"
                    Target.Cells.Interior.ColorIndex = 3
                Case "Text9"
                    Target.Cells.Interior.ColorIndex = 34
                Case "Text10"
                    Target.Cells.Interior.ColorIndex = 35
                Case "Text11"
                    Target.Cells.Interior.ColorIndex = 4
                Case "Text12"
                    Target.Cells.Interior.ColorIndex = 6
                Case "Text13"
                    Target.Cells.Interior.ColorIndex = 6
                Case "Text14"
                    Target.Cells.Interior.ColorIndex = 6
                Case "Text15"
                    Target.Cells.Interior.ColorIndex = 45
                Case "Text16"
                    Target.Cells.Interior.ColorIndex = 4
                Case "Text17"
                    Target.Cells.Interior.ColorIndex = 4
                Case Else
                    Target.Cells.Interior.ColorIndex = 0
            End Select
        End If
    End If
End Sub
Irgendwann wirst du das ganz anders lösen, als hier aufgezeigt. Aber das ist so, wie mit dem Rechnen. Ganz zu Anfang haben wir mit den Fingern als Hilfsmittel gearbeitet, um zum Ergebnis zu kommen. Nach reichlich Übung geht es doch schon um einiges flotter :) .
 
Hallo GunMum,

vielen Dank für deine Hilfe.
Funktioniert fast so, wie ich es mir vorgestellt habe :)

Nur eine Frage habe ich noch:

Wenn ich mehrere Zeilen kopiere und diese dann in die Spalte B einfüge,
tut sich nix.

Ich muss jede Zelle für sich anklicken, F2 und Enter.

Bekommt man das auch hin, dass die Änderungen auch bei Copy&Paste (von mehreren Werten) erfolgen?

Nochmals Danke,

Gruß,

Lasersword
 
Bekommt man das auch hin, dass die Änderungen auch bei Copy&Paste (von mehreren Werten) erfolgen?
Ja, schon. Allerdings bin ich im Moment merhr mit einem grippalen Infekt im Bett als am PC. Am Wochenende solltest du mich einfach noch einmal erinnern, falls sich bis dahin nicht schon jemand gefunden hat, der den Code angepasst hat.
 
Zurück
Oben