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

Fehlermeldung in der Find-Funktion

Fehlermeldung in der Find-Funktion
02.07.2020 15:42:54
Mubi
Hallo,
ich habe ein Problem in meinem Code und finde den Fehler nicht.
In einer Userform wähle ich über 3 Comboboxen das Datum aus.
Box 1 = Tag
Box 2 = Monat
Box 3 = Jahr
Wenn ich den Code dann laufen lasse kommt folgender Fehler:
Object variable or With block variable not set.
Er springt dann immer an die Stelle X = Zeile.Row
Im Code habe ich keine with verwendet. Vor meiner Änderung hat es funktioniert. Ich musste die Variante mit dem DTPicker1 aber rausnehmen (habe die Zeilem im Code zu Übersicht dringelassen)
Private Sub CommandButton1_Click()
Dim wbtarg As Workbook
Dim wstargD, wsdataW, wsdataM As Worksheet
Set wbtarg = ThisWorkbook
Set wstargD = wbtarg.Worksheets("Tabelle")
'datum= DTPicker1.Value
'Sheet5.Cells(13, 5) = DTPicker1
Sheet5.Cells(13, 5) = ComboBox1.Value & ComboBox2.Value & ComboBox3.Value
datum = Sheet5.Cells(13, 10).Value
Set Zeile= wstargD.Range("D3:D1507").Find(What:=datum, LookIn:=xlValues, LookAt:= _
xlWhole)
X = Zeile.Row
InTotTru = Cells(X, 22).Address
InNoTru = Cells(X, 23).Address
wstargD.Range(InTotTru) = TextBox1.Value
wstargD.Range(InNoTru) = TextBox2.Value
Unload Me
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehlermeldung in der Find-Funktion
02.07.2020 15:55:57
Daniel
HI
wenn die .FIND-Funktion keinen Wert finden kann, dann erzeugt die Zeile:
Set Range_Variabe = Range(…).Find(…)
noch keinen Fehler, sondern die Range_Variable wird auf NOTHING gesetzt.
der Fehler kommt dann erst, wenn man mit dieser Variable weiter arbeiten will und Informationen abfragt, die sie auf Grund ihres "Nichts-Seins" nicht liefern kann.
mit .Find Datumswerte finden ist schwierig, da die .FIND-Funktion mit .Value in den Formatierten Zellwerten sucht und daher der Suchbegriff ein Text sein muss, der dem, gesuchtem Datum im verwendeten Zahlenformat entspricht, und das aber auch in einem deutschen Excel in der amerikanischen Schreibweise!
(wird also kompliziert)
wenn man einen Kalender hat, dh die Datumswerte sind lückenlos und aufsteigend sortiert, ist es einfacher die Zelle mit dem Datumswert zu berechnen.
dazu muss man nur die Differenz zwischen gesuchtem Datum und dem Start-Datum des Kalerndes bilden (Zelle D3) und diese zur Zeilennummer der ersten Kalenderzelle hinzuaddieren.
wenn also der Kalender in der Zelle D3 mit dem 1.1.2020 beginnt, dann steht der 3.1.2020 zwei Zeilen weiter unten, also in D5.
mit .FIND das Datum suchen muss man nur, wenn die Datumsliste lücken hat, nicht sortiert ist oder die Datumswerte nicht einer Zeile oder einer Spalte, sondern in einem mehrzeiligen und -spaltigem Zellbereich stehen.
Gruß Daniel
Anzeige
AW: Fehlermeldung in der Find-Funktion
02.07.2020 16:43:14
Luschi
Hallo Mubi,
hier mal ein Beispiel, wie man das Problem mit Application.Match erledigt:
https://www.herber.de/bbs/user/138717.xlsm
Gruß von Luschi
aus klein-Paris
AW: Fehlermeldung in der Find-Funktion
03.07.2020 12:57:47
Mubi
Hallo Luschi,
habe mir deinen Code mal angeschaut und versucht nachzuvollziehen und zu ändern. Ich benötige ja immer das Datum, was der User eingibt. In deinem Code sucht er nach dem aktuellen Datum. Weiter brauche ich zur weiteren Bearbeitung die Zeilennummer. Daher sieht mein Code aktuell so aus. Leider funktioniert es nicht. Er zeigt mir als X nur error 2042 an.
Oder habe ich was an deinem Code nicht verstanden?
Private Sub CommandButton1_Click()
Dim wbtarg As Workbook
Dim wstargD, wsdataW, wsdataM As Worksheet
Set wbtarg = ThisWorkbook
Set wstargD = wbtarg.Worksheets("Export")
'datum = DTPicker1.Value
'Sheet5.Cells(13, 5) = DTPicker1
Sheet5.Cells(15, 5) = ComboBox1.Value & ComboBox2.Value & ComboBox3.Value
datum = Sheet5.Cells(13, 10).Value
Set rg = Sheet1.Range("D3:D1507")
X = Application.Match(CLng(datum), rg, 0)
Set Treffer = wstargD.Range("D3:D1507").Find(What:=datum, LookIn:=xlValues, LookAt:= _
xlWhole)
X = Treffer.Row
InTotTru = Cells(X, 22).Address
InNoTru = Cells(X, 23).Address
wstargD.Range(InTotTru) = TextBox1.Value
wstargD.Range(InNoTru) = TextBox2.Value
Unload Me
End Sub

Anzeige
AW: Fehlermeldung in der Find-Funktion
03.07.2020 21:00:22
Luschi
Hallo Mubi,
was soll ich sagen, ich zeige Dir ein Beispiel mit Application.Match - und Du kommst wieder mit Range.Find daher.
Warum Range.Find hier meist scheitert, hat doch Daniel ausführlich begründet.
Mach eine kleine Beispieldatei und wir werden weitersehen.
Gruß von Luschi
aus klein-Paris
AW: Fehlermeldung in der Find-Funktion
03.07.2020 13:48:02
Mubi
Hallo Daniel,
ich verstehe was du meinst und es wäre theoretisch auch möglich, weil die Datumswerte lückenlos und aufsteigend sind. 30.03.2020 in D3 bis 04.03.2024.
Habe es mal versucht. Allerdings kommt was falsches raus. Wenn ich als Bsp. 01.08.2020 auswähle müsste 127 rauskommen. Es sagt mir aber 24.03.4742
Beide Ausgangsfelder sind als Date formatiert. Liegt es an der ComboBox?
Wenn ich eine neue Datei mache (also ohne die ComboBox) dann kommt der richtige Wert. Benötige aber die Eingabe.
Private Sub CommandButton1_Click()
Dim wbtarg As Workbook
Dim wstargD, wsdataW, wsdataM As Worksheet
Dim x As Integer
Set wbtarg = ThisWorkbook
Set wstargD = wbtarg.Worksheets("Export")
Sheet5.Cells(13, 5) = ComboBox1.Value & ComboBox2.Value & ComboBox3.Value
y = Sheet1.Cells(3, 4).Value
Z = Sheet5.Cells(15, 5).Value
Sheet5.Cells(25, 12) = Z - y + 3
x = Sheet5.Cells(25, 12).Value
InTotTru = Cells(x, 22).Address
InNoTru = Cells(x, 23).Address
wstargD.Range(InTotTru) = TextBox1.Value
wstargD.Range(InNoTru) = TextBox2.Value
Unload Me
End Sub

Anzeige
AW: Fehlermeldung in der Find-Funktion
03.07.2020 15:00:40
Daniel
naja, du musst da schon ein richtiges Datum in die Zelle eintragen
01012020 ist kein Datum, sondern die Zahl 1.012.020.
Datumswerte sind zwar auch Zahlen, diese werden aber nach der Regel "ein Tag = 1" beginnend mit dem 1.1.1900 gebildet und dann kannst du dir ausrechnen, was deine Zahl für ein Datum ergibt.
wenn dann so:
Sheet5.Cells(13, 5) = DateSerial(ComboBox3.Value, ComboBox2.Value, ComboBox1.Value)

Gruß Daniel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige