Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1896to1900
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

VBA - Find Methode

VBA - Find Methode
26.08.2022 13:41:33
Herbert
Moin moin Leute,
vorhin hat es noch funktioniert, nachdem ich dann die Werte für die nachfolgenden Textboxen bestimmt habe,
habe ich nur noch die Fehlermeldung With-/ Objektvariable nicht festgelegt... .
Vorab:
Die Anzeige der Ergebnisse basiert auf eine Userform,
die Nummer (txtbx_Nummer) ist auch die einzige benutzbare Textbox in der ganzen Userform.
Code:

Dim a As Range, c As Integer
Set a = Worksheets("Datenbank").Range("tbl_Lieferschein[1-1,3 to.]:tbl_Lieferschein[32 to.]").Find(txtbx_Nummer, LookIn:=xlValues)
On Error GoTo Sprungmarke1:
c = a.Column
If Worksheets("Datenbank").Cells(a.Row, 17).Value  "" And Worksheets("Datenbank").Cells(a.Row, 18).Value = "Ja" Then
txtbx_Standort.Value = "Bei KLEIHUES im Werk!"
ElseIf Worksheets("Datenbank").Cells(a.Row, 17).Value  "" And Worksheets("Datenbank").Cells(a.Row, 18).Value = "Ja" And Worksheets("Datenbank").Cells(a.Row, 19).Value = "Ja" Then
txtbx_Standort.Value = "Auf Baustelle verblieben!"
Else
txtbx_Standort.Value = "Bei uns in benutzung!"
End If
txtbx_Laststufe.Value = Worksheets("Datenbank").Cells(1, c).Value
txtbx_Lieferschein_Nummer.Value = Worksheets("Datenbank").Cells(a.Row, 1).Value
Exit Sub
Sprungmarke1:
MsgBox "Das von Ihnen gesuchte DEHA-Gehänge" & _
vbCrLf & "ist nicht in der Matrix zu finden," & _
vbCrLf & "bitte überprüfe einmal Manuel!" & _
vbCrLf & _
vbCrLf & "Um direkt auf das Tabellenblatt zukommen," & _
vbCrLf & "Den Button -> WEITER !"
End Sub
Als Fehler wird c = a.column angezeigt,
weil a nicht der Wert ist der er sein soll,
wobei dieser zu Anfang noch genau das getan hat,
was er sollte und a immer richtig ermittelt wurde.
Um a zu ermitteln wird dieser Code benutzt:

Set a = Worksheets("Datenbank").Range("tbl_Lieferschein[1-1,3 to.]:tbl_Lieferschein[32 to.]").Find(txtbx_Nummer, LookIn:=xlValues)

Danke für jedem seine Hilfe!
MfG
Herbert

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Find Methode
26.08.2022 14:10:28
Daniel
Hi
So wie du hier arbeitet, solltest du keinen On Error-Sprung verwenden.
Du kannst auch mit If a is Nothing Then hier eine entsprechende Prüfung einfügen und dann ordentlich ohne Fehler in den verschiedenen IF-Blöcken arbeiten.
Das ist immer besser als Fehlerbehandlung.
a is Nothing ergibt FALSE, wenn die Suche erfolgreich war und TRUE wenn nicht.
Wenn die .Find - Funktion "plötzlich" keine Werte mehr liefert, dann liegt die Ursache meistens daran, dass im Code dann nicht alle relevanten Parameter gesetzt werden und zwischen zwei Läufen ein Anwender oder ein anderes Makro eine dieser nicht vorgegebenen Parameter verändert hat und der dann natürlich gilt.
Bei fehlt bspw die Einstellung: LookAt:=xlPart/xlWhole (gesamten Zellinhalt vergleichen)
Wenn du hier xlPart benötigst, aber in der letzten Suche jemand xlWhole eingestellt hat, funktioniert deine suche nicht mehr.
Daher bei .Find nicht sparsam sein und immer möglichst viele Parameter setzen, die das Suchergebnis beeinflussen könnten, auf jeden Fall immer LookIn und LookAt, weil die auch von Anwendern umgestellt werden. Bei MatchCase müsstest du mal in der Hilfe schauen, obs nen Default gibt oder ob hier auch die letzte Einstellung übernommen wird.
Gruß Daniel
Anzeige
Perfekt danke!
26.08.2022 14:16:57
Herbert
Moin Daniel,
die Hilfestellung hat genügt!
Klappt wieder wie vorher,
danke vielmals.
Ich habe auch noch ein .Find("What:="...)
in die Find methode eingesetzt,
kann das auch was damit zutun gehabt haben?

MfG
Herbert

AW: Perfekt danke!
26.08.2022 15:24:34
Daniel
Hi
Wenn eine Funktion mit mehreren Parametern hat, kann man:
- Die Parameter in der vorgesehen Reihenfolge angeben, dann darf man die Parameterbenennung (das What:=) weglassen.
- die Parameter in beliebiger Reihenfolge angeben, dann muss man sie benennen.
Man auch beides mischen, dh. solange man in der vorgesehen Reihenfolge bleibt, kann man die Benennung weglassen, sobald man die Reihenfolge verlässt, muss man benennen.
Da "What" der erste Parameter ist, darf es nichts ausmachen, wenn du das als erstes angibst und das What weglässt.
Da .Find viele Parameter hat und man die Reihenfolge meist nicht im Kopf hat und man von den vielen auch einige nicht angibt, ist man hier mit der Benennung auf der sicheren Seite.
Die Verwendung der Konstanten allein (xlPart, xlwhole, xlvalues) schützt einen hier nicht vor Fehlern, denn dahinter stecken nur Zahlen und einem LookAt:= ist es egal ob du 1, xlValues oder xlPart schreibst.
Gruß Daniel
Anzeige
AW: VBA - Find Methode
26.08.2022 14:21:51
GerdL
Nein,
daneben sollte man den Parameter MatchCase:=True/False für die Unterscheidung nach Groß-/Kleinschreibung ja/nein angeben.
Gruß Gerd
Doppelter Wert "neusten"
26.08.2022 14:38:12
Herbert
Moin Gerd,
muss dieses auch nach ganz hinten zum "LookAt"?
Und wie kann ich jetzt bei z.B. doppelter Nennung einer Nummer,
die nächste halt gleiche Nummer finde?
z.B.:
A1 = "5035" (02.02.2022)
D6 = "5035" (05.06.2022)
jetzt gibt mir aber der Code den ersten passenden Wert wieder,
dabei möchte ich eigentlich den immer am nächsten am geradigen Datum hinzugefügten Wert als Ergebnis haben,
also D6 mit dem hinzufüge Datum 05.06.2022 (dieses steht in Spalte 6 / F).
Danke für jede Hilfe!
MfG
Herbert

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige