PDA

Vollständige Version anzeigen : .findnext() - Methode nicht gefunden


Vigo2
27.06.2014, 17:19
Hallo zusammen!

Ich möchte einen Bereich nach dem Wort "Di" absuchen. Dieses kommt insgesamt 4x mal vor. Wenn es gefunden wird, dann soll genau darunter "x" ausgegeben werden.
Das Ganze wollte ich so realisieren (Ausschnitt):


Dim erstezelle As String, xyAdresse As String
Dim xy As Range

If par = "DI" Then
Set xy = wkshilf.Range(Cells(2, 2), Cells(2, 21)).Find(what:="Di", LookIn:=xlValues)
If Not xy Is Nothing Then
erstezelle = xy.Address
Do Until xyAdresse = erstezelle
xy.Offset(1, 0).Value = "x"
Set xy = .FindNext(xy)
xyAdresse = xy.Address
Loop
End If

Ich bekomme dann in der rot markierten Zeile folgendes angezeigt:
Fehler beim Kompilieren: Methode oder Datenobjekt nicht gefunden.
Hmmm... ich hab den Code in Internet gefunden und ihn halt angepasst.
Was muss man hier nun machen, damit der Code läuft? Über Anregungen würde ich mich freuen!

Viele Grüße, Vigo2

Hajo_Zi
27.06.2014, 17:20
findnext kannst Du erst benutzen nach Find und das fehlt bei Dir.

<img src="http://Hajo-Excel.de/images/grusz1.gif" align="middle" height="40" alt="Grußformel"><a href="http://Hajo-Excel.de/index.htm"><img border="0" src="http://Hajo-Excel.de/images/logo_hajo3.gif" align="middle" height="40" alt="Homepage"></a>

Vigo2
27.06.2014, 17:33
Hallo Hajo!

.Find() hab ich hier benutzt:

Set xy = wkshilf.Range(Cells(2, 2), Cells(2, 21)).Find(what:="Di", LookIn:=xlValues)

Hab ich das falsch angewandt?

Viele Grüße, Vigo2

Hajo_Zi
27.06.2014, 17:38
das hatte ich übersehen. Ich sehe erstmal nicht das Problem.
Ich benutze dafür immer folgenden Code.
Public Sub Find_MethodeDatum()
Dim Loletzte As Long
Dim RaFound As Range
Dim StAdresse As String
Application.ScreenUpdating = False
Application.EnableEvents = False
With Columns(1)
Set RaFound = .Find(What:=Date, LookAt:=xlWhole, LookIn:=xlValues)
If Not RaFound Is Nothing Then
StAdresse = RaFound.Address
Do
With Worksheets("Tabelle2")
Loletzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), _
.Cells(Rows.Count, 1).End(xlUp).Row, .Rows.Count)
Range("B" & RaFound.Row & ":F" & RaFound.Row).Copy .Range("A" & Loletzte + 1)
End With
Set RaFound = .FindNext(RaFound)
Loop While Not RaFound Is Nothing And RaFound.Address <> StAdresse
End If
End With
Application.EnableEvents = True
Application.CutCopyMode = False 'Zwischenspeicher löschen
Application.ScreenUpdating = True
End Sub
<a href="http://Hajo-Excel.de/index.htm" target="_blank" title="Hajo's Excelseiten">Gruß Hajo</a>

EarlFred
27.06.2014, 18:08
Hallo Vigo2,

als Autor Deines Codes hast Du Dir sicher Gedanken um den Punkt gemacht:
Set xy = .FindNext(xy)

Was hat Dich veranlasst, diesen dort zu setzen?


@Hajo
Deine Abbruchbedingung erzeugt einen Fehler, wenn RaFound Nothing ist.

Grüße
EarlFred

Vigo2
27.06.2014, 18:17
Hallo zusammen!

Er läuft!

Also danke @ Hajo, dass du deinen Code gepostet hast:
Dein Ausschnitt hier:
With Columns(1)
Set RaFound = .Find(What:=Date, LookAt:=xlWhole, LookIn:=xlValues)

hat mich zu folgender Änderung in meinem Code geführt:
With Worksheets("Hilfstabelle").Range(Cells(1, 2), Cells(1, 21))
Set xy = .Find(what:="Di", LookIn:=xlValues)

Und das rechtfertigt den Punkt bei:
Set xy = .FindNext(xy)
worauf EarlFred sicherlich hinaus wollte, weil man sich damit nämlich auf das jeweilige Tabellenblatt inkl. Bereich bezieht!

Vielen Dank!

Viele Grüße, Vigo