Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
796to800
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
796to800
796to800
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Weitersuchen mit For each Schleife

Weitersuchen mit For each Schleife
30.08.2006 17:55:45
Alex
Hallo,
bin leider im Archiv nirgends fündig geworden und schon nahe am Verzweifeln. Leider komm ich nicht klar mit der Suche via VBA. Hier mein Code:
#Code:

Sub CommandButton2_Click()
Dim strZ As String
Dim Cll As Range
Dim objZ As Range
strZ = "ness"
For Each Cll In ActiveWorkbook.Worksheets(1).Columns(5)
Set objZ = ActiveWorkbook.Worksheets(1).Cells.Find(What:=strZ, LookAt:=xlPart)
If objZ Is Nothing Then
MsgBox "Kein Eintrag"
Else
objZ.Interior.ColorIndex = 8
End If
Next Cll
Set objZ = Nothing
Set Cll = Nothing
End 

Sub
Der String "ness" kommt dabei aber mehrfach in Spalte E vor, aber nur der erste Eintrag wird markiert.
Kann mir jemand erklären, wo mein Fehler liegt? Normalerweise sollte durch "For Each" doch jede Zelle in Spalte E angesprochen werden - oder hab ich da einen totalen Denkfehler?!?!?
Danke für Eure Hilfe!
'A

		

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Weitersuchen mit For each Schleife
30.08.2006 18:07:35
Peter
Hallo Alex,
versuch mal das beigefügte Makro:

Sub suchen()
Dim SuWert    As String
Dim lZeile    As Long
Dim firstAdr  As String
Dim Zelle     As Range
Start_InpBox:
SuWert = Application.InputBox(prompt:=" Bitte einen Suchbegriff eingeben!", _
Title:="  Suche", Type:=2)
If SuWert = "Falsch" Then Exit 

Sub  ' Abbrechen wurde angeklickt
If SuWert = "" Or SuWert = " " Then ' es wurde nichts eingegeben
MsgBox "Ohne Eingabe eines Suchbegiffes kann das Makro nicht suchen.", _
64, "   fehlende Eingabe."
GoTo Start_InpBox
End If
lZeile = Cells(65536, 1).End(xlUp).Row
Range("A2:A" & lZeile).Interior.ColorIndex = xlColorIndexNone
With Sheets(3).Range("A2:A" & lZeile)
Set Zelle = .Find(SuWert, LookIn:=xlValues)
If Not Zelle Is Nothing Then
firstAdr = Zelle.Address
Do
Zelle.Interior.ColorIndex = 6
Set Zelle = .FindNext(Zelle)
Loop While Not Zelle Is Nothing And Zelle.Address <> firstAdr
End If
If firstAdr = "" Then
MsgBox "Der Suchbegiff " & SuWert & " wurde nicht gefunden.", _
64, "   Suchbegriff ist nicht vorhanden."
End If
End With
End Sub

Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
Anzeige
AW: Weitersuchen mit For each Schleife
30.08.2006 18:17:25
Alex
Klappt wunderbar - vielen Dank. Hatte das Problem als solches auch gelöst mit einer loop-until Schleife, aber das war nicht so elegant gelöst.
Mich würde aber dennoch interessieren, warum ich das Problem nicht mit der For Each Schleife lösen konnte. Wo liegt denn da mein Denkfehler?
AW: Weitersuchen mit For each Schleife
30.08.2006 18:23:08
Reinhard
Hi Alex,
mit Cll machst du ja nix in der For-Schleife.
ps: Cll finde ich nicht gut, leicht mit C11 zu verwechseln, also erschwert das Codelesen usw.
Und find findet anscheinend immer das gleiche erste Ergebnis.
Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
AW: Weitersuchen mit For each Schleife
30.08.2006 18:31:47
Alex
Aber genau da liegt mein Verständnissproblem!
Eigentlich dachte ich, würde durch
"For Each Cll"
Cll automatisch hochgezählt werden und somit in der nächsten Zelle die Anweisung überprüft. Das wird aber nur bis zum ersten Eintrag gemacht (der gesuchte string ist auch nicht gleich in der ersten Zeile). Danach wird die Suche abgebrochen obwohl noch weitere strZ in der Spalte zu finden sind.
Ich würde gern die ganze Sache verstehen, sonst hab ich ein dickes Problem in Zukunft fürchte ich!!!
Danke Euch
AW: Weitersuchen mit For each Schleife
30.08.2006 19:12:01
Reinhard
Hi Alex,
erklären kann ichs nicht, deshlab Frage noch offen, aber lass mal den Codde laufen.
Option Explicit
Erst ist der Rückgabewert quasi 1,. also es gibt nur einen Bereich E:E,
Im zweiten fall ist der Rückgabewert quasi 65536, also in E:E gibt es 6536 Zellen
Sub CommandButton2_Click()
Dim Cll
ActiveWorkbook.Worksheets(1).Columns(5) = "huhu"
For Each Cll In ActiveWorkbook.Worksheets(1).Columns(5)
MsgBox Cll.Address
Next Cll
For Each Cll In ActiveWorkbook.Worksheets(1).Range("E:E")
MsgBox Cll.Address
Next Cll
End Sub

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
AW: Weitersuchen mit For each Schleife
30.08.2006 21:12:59
MichaV
Hallo Alex (und Reinhard),
damit Du keine Probleme bekommst:
Die Schleife
For Each Cll In ActiveWorkbook.Worksheets(1).Columns(5)
...
Next
ist sinnfrei, weil ActiveWorkbook.Worksheets(1).Columns(5) nur eine Spalte hat, nämlich die Spalte E. Das kannst Du ganz gut testen, indem Du schreibst
For Each Cll In ActiveWorkbook.Worksheets(1).Columns(5)
MsgBox Cll.Address 'die MsgBox erscheint nur 1 mal! tolle Schleife.
Next
Nun könntest Du
For Each Cll In ActiveWorkbook.Worksheets(1).Columns(5).Cells
schreiben, aber das wäre noch unsinniger. Du würdest mit der Find- Methode jede einzelne Zelle der Spalte E abklappern. Die Schleife kannst Du also weglassen.
Und warum wird immer nur der erste Eintrag gefunden? Da hilft ein Blick in die F1- Hilfe weiter:
Find-Methode
Sucht bestimmte Informationen in einem Bereich und gibt ein Range-Objekt zurück, das die erste Zelle mit diesem Inhalt darstellt.

Wie Du die Zellen danach finden kannst, siehst Du im Beispiel von Peter. Oder in der F1- Hilfe.
Gruß- Micha
PS: Rückmeldung wäre nett.
Anzeige
AW: Weitersuchen mit For each Schleife
01.09.2006 11:54:00
Alex
Danke Euch für Eure Hilfe. Ich bin mir zwar noch immer nicht im klaren, warum Excel hier nicht weiterarbeitet, aber das muss man wohl schlucken. In jedem Fall hat mir Eure Hilfe sehr weitergeholfen!!!

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige