Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1620to1624
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Farbe vor neuem Suchlauf löschen

Farbe vor neuem Suchlauf löschen
09.05.2018 15:35:25
Chris
Hallo, habe hier was kleines gebastelt - bloß bringt mir Excel ständig einen Laufzeitfehler. "Die Interior-Eigenschaft des Range Objektes kann nicht zugeordnet werden.
Hat da jemand eine Idee?

Private Sub CommandButton1_Click()
'Wir definieren im ersten Schritt die die aktuelle Position des
'jeweiligen Treffers enthält.
'Sowie die Variable PLZ. Sie wird die Position des ersten Treffers
'enthalten
Dim rngcellPLZ As Range
Dim PLZ As Variant
'Hintergrundfarbe rot entfernen
'Tabelle1.UsedRange.Interior.Color = xlNone
Dim rng As Range
For Each rng In Tabelle1.Range("a:z")
If rng.Interior.ColorIndex = 255 Then
rng.Interior.ColorIndex = xlNone
End If
Next
'Es werden die Spalten A - Z der Tabelle 1 durchsucht.
With Tabelle1.Range("a:z")
'Im ersten Schritt leeren wir die Ergebnistabelle
UserForm1.ListBox1.Clear
'Mit der Find Methode bilden wir letztendlich die Standardsuche aus Excel in VBA nach.
'Die Syntax lautet wie folgt:
'Ausdruck .Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase,  _
MatchByte, SearchFormat)
'Kurze Erläuterung zu den Komponenten:
'What = Was wollen wir suchen? (erforderlich)
'After = Wird hier nichts angegeben, beginnt die Suche in der liken oberen Ecke des  _
Bereiches.
'        Ansonsten, falls angegeben beginnt die Suche NACH dieser Zelle beginnt. ( _
optional)
'LookIN = Der Informationstyp (optional)
'LookAt = xlWhole oder xlPart, also nach einer "genauen" Suche oder auch nach  _
Teilbegriffen (optional)
'SearchOrder = xlByRows oder xlByColumns (optional)
'SearchDirection = Suchrichtung (optional)
'MatchCase = Groß oder Kleinschreibung beachten? Dann True, ansonsten False (optional)
'Wir werden hier in unserem Beispiel die einzige Erforderliche Komponente, What.
Set rngcellPLZ = .Find(UserForm1.TextBox1)
'Sollte die Methode keinen Treffer finden gibt sie "Nothing" zurück. Mit not....Nothing  _
werten wir den Treffer
'aus.
If Not rngcellPLZ Is Nothing Then
'Die Variable PLZ wird mit der Position des Treffers 1. Treffers belegt.
'Wenn der angebene Bereich durchsucht wurde, würde die Suche wieder von vorne  _
beginnen.
'Deshalb müssen wir unserer Do Loop Schleife einen Austritt mitteilen. Dies wird spä _
ter PLZ sein.
PLZ = rngcellPLZ.Address
'Mit einer Do Loop Schleife werden die Treffer abgearbeitet.
Do
'Jetzt befüllen wir die Listbox mit den Treffern.
With UserForm1.ListBox1
'Spaltenanzahl
.ColumnCount = 7 '-- eine Spalte mehr
'Item hinzufügen
.AddItem
'Unser Treffer (hier die Postleitzahl)
.List(.ListCount - 1, 0) = rngcellPLZ.Value
'Der dazugehörige Städtename eine Spalte rechts neben dem Treffer, deshalb . _
_
Offset(0, 1)
.List(.ListCount - 1, 1) = rngcellPLZ.Offset(0, 1).Value
'Und zu guter Letzt noch die Zelle des Treffers.
.List(.ListCount - 1, 2) = rngcellPLZ.Offset(0, 2).Value
'4. Spalte'
.List(.ListCount - 1, 3) = rngcellPLZ.Offset(0, 4).Value
'5. Spalte'
.List(.ListCount - 1, 4) = rngcellPLZ.Offset(0, 27).Value
'--neu--6. Spalte eintragen der Zeilennummer
.List(.ListCount - 1, 5) = rngcellPLZ.Address
'row = rngcellPLZ.row
'col = rngcellPLZ.Column
'Die Treffer werden mit einem grünen Hintergrund belegt.
rngcellPLZ.Interior.Color = 255
rngcellPLZ.Offset(0).Interior.Color = 255
'Definition der Spaltenbreite
.ColumnWidths = "1,5cm;1,5cm;1,5cm;2,0cm;2,0cm;1,0cm"
End With
'mit .FindNext springen wir zum nächsten Treffer der Suche.
Set rngcellPLZ = .FindNext(rngcellPLZ)
'Die Schleife soll solange arbeiten wie Treffer vorhanden sind.
'Wie aber oben bereits erwähnt würde der Suchlauf wieder von vorne beginnen,  _
deshalb
'soll die Schleife austreten wenn PLZ, also der erste Treffer, wieder erreicht  _
wurde
Loop While Not rngcellPLZ Is Nothing And rngcellPLZ.Address  PLZ
End If
End With
'Bevor die Prozedur beendet wird lassen wir uns noch die Treffer auf einem Label anzeigen.
Label1.Caption = ListBox1.ListCount & " Treffer"
'    If ListBox1.ListCount = 1 Then
'        Application.Goto Tabelle1.Range(ListBox1.List(0, 5))
'    End If
End Sub

Private Sub Label1_Click()
End Sub
'Bei Klick auf einen Treffer soll diese Zelle in der Tabelle ausgewählt werden
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
'--auslesen der Zeilennummer in Spalte 6
Range(ListBox1.List(ListBox1.ListIndex, 5)).Select
End Sub

Private Sub UserForm_Click()
End Sub

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
statt ColorIndex nur Color....
09.05.2018 15:54:09
robert
For Each rng In Tabelle1.Range("a2:z3")
If rng.Interior.Color = 255 Then
rng.Interior.Color = xlNone
End If
Next
AW: statt ColorIndex nur Color....
14.05.2018 07:04:11
Chris
Gleicher Fehler -
Er gibt die Zeile als Fehler aus:
If rng.Interior.Color = 255 Then
AW: statt ColorIndex nur Color....
14.05.2018 07:20:17
Chris
Also mit Interior.Color gibt es erstmal keine Fehlermeldung ... Er löscht bloß keine rote Farbe im Dokument. Sondern führt einfach nur immer die Anweisung weiter unten aus - also das er etwas rot markieren soll.
AW: statt ColorIndex nur Color....
14.05.2018 07:04:13
Chris
Gleicher Fehler -
Er gibt die Zeile als Fehler aus:
If rng.Interior.Color = 255 Then
AW: statt ColorIndex nur Color....
14.05.2018 07:32:13
hary
Moin
Robert sein Code funzt. Lad doch eine Bsp.-Mappe hoch.
gruss hary
Anzeige
AW: geht bei mir nicht
14.05.2018 08:49:07
hary
Moin
Ich bekomme die Datei nicht entzippt. Trotz Winzip.
Mir wuerde nur die Tabelle reichen wo die Farben drin sind, die ist evtl. nicht so gross.
gruss hary
AW: geht bei mir nicht
14.05.2018 09:16:41
Chris
https://www.herber.de/bbs/user/121589.xlsm
Ging vorhin nicht ... weil man hier nur 300Kb hochladen kann - hab jetzt die Tabelle verkleinert.
Also das Makro funktioniert komplett - es ist halt nur so, dass wenn ich zwei Suchdurchläufe mache - er keine rote Farbe löscht.
Anzeige
AW: geht bei mir nicht
14.05.2018 09:45:01
Daniel
Hi
ist doch logisch:
For Each rng In Tabelle1.Range("a1673:z1673")
du entfärbst hier nur die Zellen in der Zeile 1673.
ich würde hier ohne Schleife die ganze Tabelle auf einmal entfärben, dh ohne For-Next-Schleife, sondern nur:
Tabelle1.Range("A:Z").Interior.Colorindex = xlnone

noch ein Tip:
die Definition der Spaltenbreite
                'Definition der Spaltenbreite
.ColumnWidths = "1,5cm;1,5cm;1,5cm;2,0cm;2,0cm;1,0cm"

gehört nicht in die Schleife.
am besten definierst du die Spaltenbreiten schon im VBA-Edtior in der Eigenschaftsliste.
Im Code muss das nur erfolgen, wenn die Spaltenbreiten berechnet werden müssen.
Wenn man die Spaltenbreiten im code definiert, dann außerhalb der Schleife, denn es reicht ja, wenns einnmal gemacht wird.
Gruß Daniel
Anzeige
AW: geht bei mir nicht
14.05.2018 09:51:13
Chris
Danke :)
Stimmt ... hab ich garnicht drauf geachtet mit der Zelle.
Ich möchte aber nicht das ganze Dokument entfärben, weil es viel Farbe in den Dokument gibt.
Ich möchte nur ROT entfärben.
Wenn ich das so schreibe:
Dim rng As Range
For Each rng In Tabelle1.Range("A:Z")
If rng.Interior.Color = 255 Then
rng.Interior.Color = xlNone
End If
Next
fliegt mir das Makro um die Ohren - erst keine Rückmeldung & dann nach neustart :
kann Intengior Objekt wieder Range nicht zugeordnet werden
AW: geht bei mir nicht
14.05.2018 10:12:20
Daniel
HI
du solltest die Schleife nicht über alle Zeilen (1,04 Mio) laufen lassen, sondern nur über die Zellen, die auch verwendet werden:
For each rng in Tabelle1.Range("A1:Z" & Tabelle1.Cells(Rows.Count, 1).end(xlup).Row)

Wenn du so arbeitest, hast du mit den anderen Farben ein Problem.
Sobald eine Zelle mit Farbe von deiner Suche gefunden wird, wird die ursprüngliche Farbe zuerst mit Rot überschrieben und bei der nächsten Suche gelöscht.
ich würde das Thema "Farbe" aus dem Code ganz rausnehmen und ggf über die Bedingte Formatierung machen.
hierzu schreibst du den Suchbegriff aus der TextBox in eine freie Zelle (z.B. AZ1)
das machst du im code oder über eine Zellverknüpfung in der TextboxEigenschaft ControlSource (dort die Zelladresse eintragen)
für die Zellen der Tabelle richtest du dann eine Bedingte Formatierung mit folgender Regel ein:
=Wenn($AZ$1"";IstZahl(Suchen($AZ$1;A1);falsch)
dann geht das Umfärben automatisch und ohne Code, einfach durch ändern des Zellwertes in AZ1
A1 ist in der Formel die aktuelle Zelle.
Gruß Daniel
Anzeige
Korrektur:
14.05.2018 10:23:36
Daniel
=Wenn($AZ$1"";IstZahl(Suchen($AZ$1;A1));falsch)

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige