Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
852to856
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
852to856
852to856
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

FIND ohne Treffer führt zum Fehler

FIND ohne Treffer führt zum Fehler
07.03.2007 20:43:56
Oliver
Hallo liebe VBA-Profis!
Ich verzweifele an folgender Aufgabe:
Die Eingabe einer Zahl in ("Tabelle 1") möchte ich in einer Liste in ("Tabelle 2") suchen, finden und im Verlauf der Trefferzeile einen Text vermerken. Das klappt hiermit auch schon ganz gut:
(...)
Dim SUCHE
SUCHE = Sheets("Tabelle1").Range("C2")
If SUCHE = "" Then
MsgBox ("Bitte Zahl eingeben")
Exit Sub
Else
End If
Sheets("Tabelle2").Activate
Columns("A:A").Find(What:=SUCHE, _
After:=Range("A1"), _
Lookat:=xlWhole, LookIn:=xlFormulas, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate
With ActiveCell.Offset(0, 7)
.Value = "Eingegeben von " & Application.UserName & " am " & Date
.Font.ColorIndex = 3
.Font.Bold = True
End With
(...)
Wenn die Zahl allerdings nicht in der Liste enthalten ist, erscheint :
Laufzeitfehler '91': Objektvariable oder With-Blockvariable nicht festgelegt.
Ich habe gebastelt ... dieser Einschub funzt jedenfalls nicht:
If Not (SUCHE Is Nothing) Then
MsgBox ("Die Zahl ist in der Liste nicht vorhanden.")
Exit Sub
End If
Was mache ich falsch? Wie kann ich festlegen, dass eine MsgBox erscheint, wenn FIND nix findet?
*****
Und dann habe ich - sorry - noch eine Frage an die Experten:
Für den FIND-Befehl aktiviere ich zuerst "Tabelle2", nach der Suche springe ich anschließend wieder in "Tabelle1". Kann ich die Suchfunktion nicht auch im Offset ausführen lassen?
Dieser dumme Versuch klappt jedenfalls nicht:
Sheets("Tabelle1").Columns("A:A").Find(What:=SUCHE, _
Danke für jedwede Hilfe
sagt
Oliver

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

Betreff
Datum
Anwender
Anzeige
AW: FIND ohne Treffer führt zum Fehler
07.03.2007 21:07:00
Ramses
Hallo
Die Fehlerbehandlung gezielt ausschalten ist die Lösung
Dim srcRange as Range
....
On Error resume next
Set srcRange = Columns("A:A").Find(What:=SUCHE, _
After:=Range("A1"), Lookat:=xlWhole, LookIn:=xlFormulas)
If srcRange is Nothing Then
msgbox "Nx Da"
Exit sub
end if
On Error Goto 0 'NULL nicht O !!!
With srcRange.Offset(0, 7)
.Value = "Eingegeben von " & Environ("Username") & " am " & Date
.Font.ColorIndex = 3
.Font.Bold = True
End With
... ungetestet, sollte aber tun.
Application.Username taugt übrigens nix, weil bei Firmen häufig der Firmenname drin steht, und das ausserdem von jedem User jederzeit geändert werden kann.
Extras - Optionen - Register Allgemein
Gruss Rainer
Anzeige
AW: FIND ohne Treffer führt zum Fehler
07.03.2007 21:16:00
Karin
Hallo Oliver,
hier noch eine andere Möglichkeit:
If WorksheetFunction.CountIf(Sheets("Tabelle2").Range("A:A"), Suche) > 0 Then
MsgBox "Zahl " & Suche & " wurde gefunden"
Else
MsgBox "Zahl " & Suche & " wurde nicht gefunden"
End If
Gruß
Karin
AW: FIND ohne Treffer führt zum Fehler
07.03.2007 21:33:00
Daniel
Hallo Rainer
wenn du das FIND-Ergebnis direkt einer Objektvariable zuweist, ist das Abschalten der Fehlerbehandlung unnötig, weil kein Abbruch erzeugt wird, wenn nichts gefunden wird.
die Objektvariable bleibt leer, aber es gibt keine Fehlermeldung.
Die Fehlermeldung erfolgt nur, wenn die nicht gefundende Zelle bspw. aktiviert werden soll. oder wenn mit .FIND(...).ROW oder ähnlichem gearbeitet wird.
dh. kein Abbruch bei
Dim rngERG as range
set rngERG = Cells.Find(what:=Suche)

Fehlermeldung und Abbruch bei
cells.find(what:=Suche).activate
Dim lngZE as Long, lngSP as long
lngZE = Cells.Find(what:=Suche).row
lngSP = cells.find(what:=Suche).column

Gruß, Daniel
Anzeige
AW: FIND ohne Treffer führt zum Fehler
07.03.2007 22:45:57
Ramses
Hallo
"...ist das Abschalten der Fehlerbehandlung unnötig,..."
JEIN
Du hast den Code aber schon weiter gelesen ?
With srcRange.Offset(0, 7)
Dazu muss ich die Objectvariable vorher abfragen.
Wenn kein Bereich gefunden wurde ergibt
If srcRange is Nothing Then
eben diesen Fehler den ich explicit ausschalten muss.
Und abfragen muss ich den Status, sonst kann ich den Code nicht weiterlaufen lassen
Gruss Rainer
AW: FIND ohne Treffer führt zum Fehler
07.03.2007 23:38:50
Daniel
Hallo
ums nochmal klarzustellen:
es ist bei deiner Vorgehensweise nicht erforderlich "On Error Resume Next" zu verwenden!
Set srcRange = Columns("A:A").Find(What:=SUCHE)
und
If srcRange is Nothing Then
erzeugen keinen Fehler, wenn der Suchbegriff nicht vorhanden ist!
Empfindlich reagiert erst
With srcRange.Offset(0, 7),
aber da ist ja durch die IF-Abfrage gewährleistet, daß dieser Programmbereich nur dann erreicht wird, wenn SUCHE auch gefunden und scrRange eine Zelle zugewiesen wurde.
Probier es aus, dein Code geht auch ohne On Error Resume Next. Und wenn es ohne geht, sollte man es auch nicht reinschreiben, sonst vertuscht man u.U. andere Fehler und bekommt seltsame Ergebnisse, die man sich nicht erklären kann.
Gruß, Daniel
Anzeige
AW: FIND ohne Treffer führt zum Fehler
08.03.2007 22:00:00
Ramses
Hallo
"...Und wenn es ohne geht, sollte man es auch nicht reinschreiben, sonst vertuscht man u.U. andere Fehler und bekommt seltsame Ergebnisse, die man sich nicht erklären kann...."
Vielen Dank für den Hinweis.
War mir nicht bekannt ;-)
Schon blöd wenn ich dann in den Fehler
"...With srcRange.Offset(0, 7),..:"
reinlaufe, wenn der Suchbegriff nicht gefunden wurde.
Wie fange ich den dann auf ?
Gruss Rainer
AW: FIND ohne Treffer führt zum Fehler
08.03.2007 22:46:52
Daniel
Hallo
du läufst auch nicht in den Fehler rein, weil du ihn ja schon mit diesem Code abfängst und das Marko beendest, falls der Suchbegriff nicht gefunden wird
If srcRange is Nothing Then
msgbox "Nx Da"
Exit sub
end if

alles was im Quellcode danach kommt, wird nur ausgeführt, wenn der Suchbegriff gefunden wurde und scrRange einen Wert hat.
somit kann der von dir befürchtete Fehler nicht passieren, weil das Marko in diesem Fall schon vorher beendet wird.
Hast du deinen Code schon mal gelesen?
Er ist besser als du glaubst und hast so dirtylittleTricks wie On Error Resume Next nicht nötig.
btw. in deinem Code ist das OnErrrorResumeNext in der Zeile mit WITH scrRange.Offset() nicht mehr wirksam, weil du es just davor mit OnErrorGoto0 wieder deaktivierst.
Gruß, Daniel
Anzeige
AW: FIND ohne Treffer führt zum Fehler
07.03.2007 21:22:35
Daniel
Hallo
erst mal zur letzten Frage, weils schneller zu beantworten ist.
Ja, du kannst den FIND-Befehl auch im Offset durchführen lassen (dh. in einer anderen Tabelle als der gerade aktiven), allerdings musst du dann auch diese Tabelle beim Parameter AFTER:= mit angeben, also so:
Sheets("Tabelle1").columns(1).find(what:=SUCHE, after:=Sheets("Tabelle1").Range("A1"))
allerdings kannst du dann die gefundene Zelle nicht mit ACTIVATE aktivieren, da das entsprechende Blatt nicht aktiv ist. Was aber geht, ist daß du die gefundene Zelle einer Range-Variable zuweist, die du dann verwenden kannst, also:
DIM rngErgebnis as range
Set rngErgebnis = Sheets("Tabelle1").Columns(1).find(what:=SUCHE)

jetzt ist in deiner Variable rngErgebnis die erste gefundene Zelle abgelegt, mit dieser Variable kannst du jetzt weiterarbeiten.
Damit ist jetzt auch dein erstes Problem gelöst.
Denn wenn FIND jetzt keinen Treffer hat, dann bleibt einfach die Variable rngErgebnis leer, aber es erfolgt kein Abbruch.
ob jetzt der Suchbegriff gefunden wurde oder nicht, kannst du dann mit diesem Code prüfen:
If rngErgebnis Is Nothing Then
MsgBox ("nichts gefunden")
Else
MsgBox ("Treffer in Zeile " & rngErgebnis.Row)
End If

gruß, Daniel
Anzeige
AW: FIND ohne Treffer führt zum Fehler
07.03.2007 21:24:54
Peter
Hallo Oliver,
versuche es einmal so:


Option Explicit
Public Sub Finden()
Dim SUCHE As String
Dim Zelle As Range
   SUCHE = Sheets("Tabelle 1").Range("C2")
   If SUCHE = "" Then
      MsgBox "Bitte eine  Zahl eingeben", _
         48, "&nbs p;  Hinweis für " & Application.UserName
  &nbs p;   Exit Sub
   End If
   With Worksheets("Tabelle2").Columns("A:A")
      Set Zelle = .Find(What:=SUCHE, _
   &nbs p;      After:=Range("A1"), _
     & nbsp;    Lookat:=xlWhole, LookIn:=xlValues, _
   &n bsp;      SearchOrder:=xlByRows, SearchDirection:=xlNext, _
          MatchCase:=False)
      If Not Zelle Is Nothing Then
         With Zelle.Offset(0, 7)
      &nbsp ;     .Value = "Eingegeben von " & Application .UserName & " am " & Date
     &n bsp;      .Font.ColorIndex = 3
    & nbsp;       .Font.Bold = True
         End With
      Else
         MsgBox "Die  Zahl  """ & SUCHE & """  ist in der  Liste nicht vorhanden.", _
             48, "   Hinweis für " & Application.Us erName
         Exit Sub
     End If
  End With
End Sub 


Gruß Peter
Anzeige
AW: FIND ohne Treffer führt zum Fehler
07.03.2007 22:18:00
Oliver
Hallo Peter!
Deine Lösung war absolut auf den Punkt!
Vielen lieben Dank dafür!
Jetzt aber ab in's Bett, is' schon spät! :-)
Gruß
Oliver
AW: FIND ohne Treffer führt zum Fehler
07.03.2007 21:44:00
Oliver
Vorab schonmal vielen lieben Dank an alle Helfer!
Da wahrscheinlich alle Lösungsvorschlage zum richtigen Ergebnis führen, muss ich jetzt noch ein bisschen basteln ...
Feedback folgt!
Gruß
Oliver

11 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige