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

Suche in zwei Tabellen mit .find

Suche in zwei Tabellen mit .find
22.08.2018 09:10:00
Bergert
Hallo,
ich habe folgendes Problem:
Ich suche in einem Sheet nach Auftragsnummern mit einem bestimmten Datum. Diese Aufträge sind in einer Spalte mit Status "A" oder Status "M" bezeichnet.
Bei Status "A" werden die Aufträge nur hochgezählt.
Bei Status "B" werden die Aufträge auch hochgezählt, zusätzlich muss in einem weiteren Sheet nach diesen Aufträgen gesucht werden, um weitere Informationen darüber zu bekommen.
Die Sheets sind Exporte aus SAP.
Folgenden Code habe ich dafür geschrieben:
(Die Worksheets sind vorher definiert)
Dim b As Object
Dim c As Object
Dim Firstrow As Integer
For Spalte = Anfangsspalte To Endspalte
Set c = wsSAP.Range("A1:A2000").Find(ws.Cells(3, Spalte), LookIn:=xlValues)
If Not c Is Nothing Then
Firstrow = c.Row
Do
ws.Cells(4, Spalte) = ws.Cells(4, Spalte) + wsSAP.Cells(c.Row, 6)
If wsSAP.Cells(c.Row, 4) = "A" Then ws.Cells(5, Spalte) = ws.Cells(5, Spalte) + wsSAP.Cells(c.Row, 6)
If wsSAP.Cells(c.Row, 4) = "M" Then
ws.Cells(8, Spalte) = ws.Cells(8, Spalte) + 1
ws.Cells(6, Spalte) = ws.Cells(6, Spalte) + wsSAP.Cells(c.Row, 6)
Set b = wsVorg.Range("A1:A2000").Find(wsSAP.Cells(c.Row, 2), LookIn:=xlValues)
If Not b Is Nothing Then
If wsVorg.Cells(b.Row, 4) Like "*1/6*" Then
ws.Cells(10, Spalte) = ws.Cells(10, Spalte) + 1
ws.Cells(19, Spalte) = ws.Cells(19, Spalte) + 1
End If
If wsVorg.Cells(b.Row, 4) Like "*1/3*" Then
ws.Cells(11, Spalte) = ws.Cells(11, Spalte) + 1
ws.Cells(17, Spalte) = ws.Cells(17, Spalte) + 1
End If
If wsVorg.Cells(b.Row, 4) Like "*1/2*" Then
ws.Cells(12, Spalte) = ws.Cells(12, Spalte) + 1
ws.Cells(17, Spalte) = ws.Cells(17, Spalte) + 1
ws.Cells(18, Spalte) = ws.Cells(18, Spalte) + 1
End If
If wsVorg.Cells(b.Row, 4) Like "*2/3*" Then
ws.Cells(13, Spalte) = ws.Cells(13, Spalte) + 1
ws.Cells(17, Spalte) = ws.Cells(17, Spalte) + 1
ws.Cells(18, Spalte) = ws.Cells(18, Spalte) + 1
ws.Cells(19, Spalte) = ws.Cells(19, Spalte) + 1
End If
If wsVorg.Cells(b.Row, 4) Like "*5/6*" Then
ws.Cells(14, Spalte) = ws.Cells(14, Spalte) + 1
ws.Cells(17, Spalte) = ws.Cells(17, Spalte) + 1
ws.Cells(18, Spalte) = ws.Cells(18, Spalte) + 1
ws.Cells(19, Spalte) = ws.Cells(19, Spalte) + 2
End If
If wsVorg.Cells(b.Row, 4) Like "*1/1*" Then
ws.Cells(15, Spalte) = ws.Cells(15, Spalte) + 1
ws.Cells(17, Spalte) = ws.Cells(17, Spalte) + 1
ws.Cells(18, Spalte) = ws.Cells(18, Spalte) + 1
ws.Cells(19, Spalte) = ws.Cells(19, Spalte) + 3
End If
End If
End If
Set c = wsSAP.Range("A1:A2000").FindNext(c)
Loop While Not c Is Nothing And c.Row Firstrow
End If
An der fett markierten Zeile steigt das Programm mit 'Objektvariable nicht festgelegt' stehen, aber nur wenn der Status = "M" ist und die innere Suche über Set b läuft.
Ich kann mir das nicht erklären und weiß keine Lösung.
Kann mir jemand weiter helfen.
Vielen Dank

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suche in zwei Tabellen mit .find
22.08.2018 10:01:32
{Boris}
Hi,
ohne die Datei zu kennen, nur die Erklärung zum Fehler:
Wenn c Nothing ist, dann hat c auch keine Row-Eigenschaft - somit läuft der Fehler bei c.Row auf.
VG, Boris
AW: Suche in zwei Tabellen mit .find
23.08.2018 07:24:30
Bergert
Hallo Boris,
vielen Dank für die schnelle Antwort, das ging ja wirklich fix - bin begeistert. Nur leider konnte ich gestern nicht mehr reagieren -> Arbeit.
Ich weiß, daß c keine row-Eigenschaft hat, wenn c Nothing ist. C kann aber nur Nothing sein, wenn der Suchbegriff überhaupt nicht gefunden wurde, dann würde aber das Programm schon an Zeile 3 bei
If Not c Is Nothing Then
zum zugehörigen End If laufen.
Die Frage ist doch ,warum liefert
Set c = wsSAP.Range("A1:A2000").FindNext(c)

Nothing, wenn der innere Code nach

If wsSAP.Cells(c.Row, 4) = "M" Then
durchlaufen wird - und nur dann!
habe mal eine Beispieldatei geschrieben, anhand derer man das sehen kann: https://www.herber.de/bbs/user/123505.xlsm
Anzeige
AW: Suche in zwei Tabellen mit .find
23.08.2018 10:59:34
Mullit
Hallo,
klare Sache, wenn Du ein zweite Suche über .Find innerhalb der ersten startest, verliert die .FindNext-Methode der ersten .Find-Suche die Bindung zum Objekt, Du könntest nur die .FindNext-Methode auf die zweite anwenden, oder getrennt suchen....
If wsSAP.Cells(c.Row, 4) = "M" Then
ws.Cells(8, Spalte) = ws.Cells(8, Spalte) + 1
ws.Cells(6, Spalte) = ws.Cells(6, Spalte) + wsSAP.Cells(c.Row, 6)

Set b = wsVorg.Range("A1:A2000").Find(wsSAP.Cells(c.Row, 2), LookIn:=xlValues)

Gruß, Mullit
Anzeige
AW: Suche in zwei Tabellen mit .find
23.08.2018 12:39:39
Bergert
Hallo Mullit,
genau das dachte ich mir.
Habe aber gedacht, wenn die zweite Suche in einem anderen Objekt läuft (nämlich b) , das es dann funktioniert.
Mhhh, dan muß ich das Programm wohl anders aufbauen.
Vielen Dank.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige