Excel VBA | Gelbe Markierung finden
#1
Hallo,

ich habe eine Tabelle mit ca. 5.000 Sätzen und vielen Spalten. In dieser Tabelle sind einige Zellen gelb markiert. Wenn das der Fall ist, soll nach der letzten Spalte eine entsprechende Bemerkung ausgegeben werden. Wenn ich den Code normal starte, wird die Bemerkung nur beim ersten Finden einer Markierung ausgegeben. Alle anderen Fälle werden ignoriert. Wenn ich den Code allerdings mit Einzelschritt (F8) einzeln durchgehe, macht er alles korrekt und schreibt bei allen betroffenen Zeilen am Ende die Bemerkung. Wie kann es sein, dass es im Einzelschritt läuft, aber nicht, wenn ich es normal ausführe? Läuft es dann zu schnell, dass er sich irgendwie verschluckt?

Code:
Sub markierung_finden()

Dim farbe As Integer
Dim letztespalte As Integer
Dim letztezeile As Integer

letztespalte = Cells(1, 256).End(xlToLeft).Column
letztezeile = Cells(1048576, 1).End(xlUp).Row

For zeile = 2 To letztezeile
For spalte = 1 To letztespalte
farbe = Cells(zeile, spalte).Interior.ColorIndex
If farbe = 6 Then
Cells(zeile, letztespalte + 1).Value = "Markierung gefunden"
End If
Next spalte
Next zeile

MsgBox ("Alles erledigt!")

End Sub

Vielleicht habt ihr eine Idee, woran es liegen kann.

Danke und Grüße
Markus
Top
#2
Hi,

also bei mir läuft dein Code problemlos. Lade doch mal deine Tabelle (ggf. anonyisiert) hoch.

Noch ein Tipp: Wenn du schon Variablen deklarierst, dann am besten alle. Setze an den Anfang deiner Module am besten immer "Option Explicit" und/oder stelle das bei den Editor-Optionen gleich mit ein.
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
Top
#3
Hi,

eine Alternative wäre mit dem Autofilter zu arbeiten. Dort kannst Du auch nach Farben filtern.
Eine Schleife über die Filter und du bist schon durch.

By the way:
Du gehst auf 1048576 Zeilen runter. Aktuell sind es nur ~5.000 und Deine Integer Variable kommt damit klar.
Sobald Du auf 32.767+1 treffen solltest wird Dein Code mit der Laufzeitfehler #6 (Überlauf) zum stehen kommen.

Max Spaltenanzahl = 16.384 -> Integer = bis +32.767 -> alles gut
Max Zeilenanzahl = 1.048.576 -> Long = bis +2.147.483.647 -> damit wäre alles gut

Hier nachzulesen:
https://support.microsoft.com/en-us/offi...9d656771c3
https://www.vba-tutorial.de/variablen/datentypen.htm

Hinweis zu .ColorIndex bzw Farben unter Excel gibt es auf Klaus-Dieters Seite (hoffe es ist für Klaus-Dieter und dem Forum hier ok das verlinkt wird):
http://excelwelt.eu/Excelallg/farb.html

Wenn Du den Weg über Filter gehen möchtest bzw support bei Deinem Code benötigst, melde Dich einfach.
Bis dahin viel Erfolg!
Top
#4
Moin!
Der .ColorIndex stammt aus Zeiten, als die ersten Farb-Röhren-Monitore mit Grafikkarten betrieben wurden, die gewaltige 256 Farben darstellen konnten.
Er ist nicht eindeutig (und die Belegung kann jederzeit geändert werden).

Daher nimmt man für korrekte Farbvergleiche statt .ColorIndex die .Color-Eigenschaft.

Da hier der Maximalwert (die Farbe RGB(255, 255, 255)) 16.777.215 (entspricht weiß) ist, reicht auch Long nicht mehr aus!
Man nimmt statt dessen Double oder Variant.

Die VBA-Konstante vbYellow entspricht übrigens dem .Color-Wert 65.535

Gruß Ralf

Als morgendliche Spielerei:
Um perfekte Farbverläufe von jeweils Schwarz auf Rot, Grün und Blau zu erzeugen, kann der geneigte Leser ja mal dieses Makro laufen lassen:

Sub Farben()
Dim i&
Worksheets.Add
With ActiveWindow
  .DisplayHeadings = False
  .DisplayGridlines = False
End With
Cells.ColumnWidth = 0.15
For i = 0 To 255
  Cells(2, i + 1).Interior.Color = RGB(i, 0, 0)
  Cells(4, i + 1).Interior.Color = RGB(0, i, 0)
  Cells(6, i + 1).Interior.Color = RGB(0, 0, i)
Next
End Sub

   
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste