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

Find Funktion mit Objektfehler

Find Funktion mit Objektfehler
19.07.2007 11:31:00
Markus
Hallo Leute!
Ich habe ein Problem und habe leider zu diesem Thema noch nicht wirklich was im Internet finden können.
(Vermutlich ist mein Denkansatz auch nicht ganz richtig...)
Naja also ich habe eine Find Funktion mit der ich Nach einem bestimmten Wort in einer Tabelle suche und dort wo er was findet kopiert er die Zeile und zum Schluss wirft er mir alle gefunden Rows in ein eigenes Arbeitsblatt rüber.
Es funktioniert alles, nur wenn ich nach einem Wort suche, dass es nicht gibt (sagt er mir schon Wort gibt es nicht) jedoch bekomme ich immer einen Objekt erforderlich (Fehler 424) ausgespuckt (ganz zum Schluss erst.)
Hier meine Funktion (wird mit einem kurzen Sub aufgerufen)

Public Function Find_Range(Find_Item As Variant, _
Search_Range As Range, _
Optional LookIn As Variant, _
Optional LookAt As Variant, _
Optional MatchCase As Boolean) As Range
Dim c As Range
If IsMissing(LookIn) Then LookIn = xlValues 'xlFormulas
If IsMissing(LookAt) Then LookAt = xlPart 'xlWhole
If IsMissing(MatchCase) Then MatchCase = False
With Search_Range
Set c = .Find( _
What:=Find_Item, _
LookIn:=LookIn, _
LookAt:=LookAt, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=MatchCase, _
SearchFormat:=False)
If c Is Nothing Then
MsgBox ("Leider nix gefunden")  '***Das wird noch ausgegeben und nachher Sagt er:
'***OBJEKT ERFORDERLICH!
Exit Function
Else
Set Find_Range = c
firstAddress = c.Address
Do
Set Find_Range = Union(Find_Range, c)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address  firstAddress
End If
End With
End Function


Kann mir vielleicht einer Helfen ? Ich bin mit meinem Latein echt am Ende ... :-(
Vielen Dank für die Hilfe schonmal im vorraus
Schöne Grüße
Markus

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Find Funktion mit Objektfehler
19.07.2007 11:41:20
Renee
Mazwara Markus,
Bevor Du den Exit Function machst, setze mal Set Find_Range = Nothing
Greetz Renee

AW: Find Funktion mit Objektfehler
19.07.2007 11:51:00
Markus
Hallo Renee!
Danke für deine schnelle Antwort.
Sowas hab ich auch schon versucht jedoch mit NULL und der Fehler kommt da leider wieder.
habe das mal so umgeändert:
If c Is Nothing Then
MsgBox ("Leider nix gefunden")
Set Search_Range = Null
Set Find_Range = Nothing
Und vllt liegt der Fehler auch im

Sub ... Hier einmal das 

Sub von mir:


Sub fertig()
Dim Suchwort As Variant
Suchwort = InputBox("Bitte geben Sie ein Suchwort ein:", "Suchwortbox")
If Suchwort = "" Then
MsgBox ("Entweder haben Sie nichts eingegeben oder auf Abbrechen geklickt." & vbLf & _
"Das EDV Team der Porr Tunnelbau wünscht Ihnene noch einen schönen Tag!")
Else
Find_Range(Suchwort, Cells, xlFormulas, xlPart).EntireRow.Copy
ActiveSheet.Paste Destination:=Worksheets.Add.Range("A1")
ActiveSheet.Columns("A:Z").EntireColumn.AutoFit
ActiveSheet.Outline.ShowLevels RowLevels:=1
ActiveSheet.Outline.ShowLevels RowLevels:=2
ActiveSheet.Outline.ShowLevels RowLevels:=3
ActiveWindow.ScrollRow = 1
End If
End Sub


Hoffe das hilft ...
Danke für die Mühen
Schöne Grüße Markus

Anzeige
AW: Find Funktion mit Objektfehler
19.07.2007 11:54:24
Renee
Hi Markus,
Dieser Befehl:
Find_Range(Suchwort, Cells, xlFormulas, xlPart).EntireRow.Copy wird in die Höschen gehen, wenn Deine Funktion nix findet !!!
Greetz Renee

AW: Find Funktion mit Objektfehler
19.07.2007 12:25:00
Markus
Ok danke für die Hilfe.
Werd mich mal dadran setzten und schauen, ob ich da eine Lösung finde ...
Oder weiß einer von euch vllt etwas wie man sowas angehen könnte ?
Schöne Grüße

AW: Find Funktion mit Objektfehler
19.07.2007 12:31:00
Renee
Hi Markus,
Vielleicht so:

if Find_Range(Suchwort, Cells, xlFormulas, xlPart) is nothing then
Msgbox "Aus nix, wird nix!"
else
Find_Range(Suchwort, Cells, xlFormulas, xlPart).EntireRow.Copy
Msgbox "Jetzt geht's ans kopieren!"
end if 


Greetz Renee

Anzeige
AW: Find Funktion mit Objektfehler
19.07.2007 12:46:00
Nepumuk
Hallo Renee,
so gibt das genauso einen Fehler, denn die Methode muss ja erst mal angewendet werden, bevor sie ausgewertet werden kann. Du muss da genauso mit Set ... arbeiten.
Und noch was, Objektvariable die nicht auf eine Klasse deuten müssen nicht zurückgesetzt werden. Denn wenn die Prozedur beendet wird, dann wird der Speicher wieder freigegeben. Nur Klassen sind speicherresistent und müssen freigegeben werden. Außerdem, einen Objektvariable ist ja nur ein Pointer der auf das Objekt im Stackframe zeigt. Beinhaltet also lediglich die Speicheradresse. Das ist eine Zahl vom Typ Long und benötigt damit gerade mal 4 Byte.
Gruß
Nepumuk

Anzeige
AW: Find Funktion mit Objektfehler
19.07.2007 13:21:00
Renee
Hi Nepumuk,
Deinen Ausführungen kann ich nur zum Teil folgen.
so gibt das genauso einen Fehler, glaub ich nicht, weil der Fehler gar nicht in der UDF auftrat!
Und noch was, Objektvariable die nicht auf eine Klasse ..., ich bin nun mal dafür das jede UDF ein 'lesbares' Resultat zurückgibt und sei es Nothing.
Greetz Renee

AW: Find Funktion mit Objektfehler
19.07.2007 13:58:08
Nepumuk
Hallo Renee,
mit dem Fehler hast du Recht, da habe ich nicht richtig geschaltet.
Aber unsinnig ist diese Art trotzdem. Wenn du das ganze über Set machst, dann musst du die Methode nur einmal anwenden.
Außerdem hat das ganze einen Haken, die Find - Methode funktioniert in Excel 2000 nicht in einer UDF. Da ist Rudis Methode allemal besser und mit Sicherheit auch schneller, den nach meinen Messungen ist die Find - Methode im vergleich zur linearen Suche in einem Array erst dann schneller, wenn sie mindestens 100.000 Zellen durchsucht.
Zu meinem vorherigen Zusatz: Eine Objektvariable welche per Set ohne den Zusatz von New (und das benötigst du ja bei Klassen um eine neue Instanz zu erstellen) auf ein Objekt verweist, muss nicht mit "Set Variable = Nothing" zurückgesetzt werden. Das passiert automatisch bein beenden der Routine.
Gruß
Nepumuk

Anzeige
AW: Find Funktion mit Objektfehler
19.07.2007 14:20:00
Renee
Hi Nepumuk,
Alles klar.
Ich hab mich mit der Funktion, bzw. was sie macht, überhaupt nicht auseinandergesetzt.
Hab nur grad die kritischen Punkte angeschaut um die Fehlerursache zu lokalisieren.
Der Befehl Set xy = Nothing ist zwar überflüssig, ob er auch unsinnig ist, darüber lässt sich streiten. Zumindest ich sehe einen gewissen 'dokumentarischen' Sinn, weil nicht jedeR LeserIn des Codes weiss, dass ohne diesen ein Nothing an den Caller zurückgeht (oder eben Nothing schon dort ist und gar nix weitergeht... ;-)
Deine Ausführungen sind für Markus sicher sehr hilfreich.
Greetz Renee

Anzeige
AW: Find Funktion mit Objektfehler
19.07.2007 13:07:52
Markus
Ja ich hab es so ähnlich versucht ich wollte es counten lassen nur hat das nicht so gut funktioniert.
Deine Version funktioniert 1A !!! Vielen Dank ;-) du hast mir echt viel geholfen DANKE! :-)
Schöne Grüße Markus

AW: Find Funktion mit Objektfehler
19.07.2007 13:16:27
Rudi
Hallo,
ich würd's ohne Find machen und die Daten in einem Array suchen und kopieren.

Sub tt()
Dim vntDaten, vntTmp(), i As Long, j As Integer, k As Integer, iTmp As Long
Dim strSuch As String
strSuch = InputBox("Suchbegriff?")
If strSuch  "" Then
vntDaten = Sheets("Tabelle2").Range("A1").CurrentRegion
For i = 1 To UBound(vntDaten, 1)
For j = 1 To UBound(vntDaten, 2)
If LCase(vntDaten(i, j)) Like LCase(strSuch) & "*" Then
iTmp = iTmp + 1
ReDim Preserve vntTmp(1 To UBound(vntDaten, 2), 1 To iTmp)
For k = 1 To UBound(vntDaten, 2)
vntTmp(k, iTmp) = vntDaten(i, k)
Next k
End If
Next j
Next i
If iTmp > 0 Then
With Worksheets.Add
.Range(.Cells(1, 1), .Cells(iTmp, UBound(vntDaten, 2))) = _
WorksheetFunction.Transpose(vntTmp)
End With
Else
MsgBox strSuch & " nicht gefunden."
End If
Else
MsgBox "Nichts ausgewählt."
End If
End Sub


Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige