Anzeige
Archiv - Navigation
1536to1540
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 mit For-Schleife

Suche mit For-Schleife
30.01.2017 09:24:02
Sebastian
Hallo im Forum,
ich hoffe mir kann geholfen werden.
Ich möchte gerne Informationen aus 2 Excel-Listen zusammen führen. Da eine davon ein jeweils aktualisierter Export mit variierendem Dateinamen ist, will ich die Routine als Makro in der Zieldateil implementieren.
Leider bekomme ich gerade den Fehler: "Fehler beim Kompilieren: Next ohne For" angezeigt. Dabei gibt es die For Funktion ...
Kann mir da jemand weiter helfen?
Hier mal was ich machen möchte in Stichpunkten:
- Makro wird aus Export-Datei gestartet, sonst Fehlermeldung
- Export wird in Spalte K absteigend sortiert
- In Zieldatei wird überprüft ob es eine "Überschriftenzeile" ist (diese enthält "|")
- Die Suche soll nur für Zeilen mit Daten (Spalte A) heute oder in der Zukunft angewendet werden
- Wenn das so ist, wird der Wert aus Spalte D als Suchwert genommen und in der Export-Datei in Spalte K gesucht
- Bei Mehrfachtreffern wird ein Text in der Zieldatei Spalte L ausgegeben
- Bei eindeutigen Treffern werden die Werte der Spalten B und C der Export Datei in Spalten L und M der Zieldatei kopiert.
- Gibt es keinen Treffer gibt es einen entsprechenden Text in der Zieldatei Spalte L
Hier mal der Code mit dem angezeigten Fehler:

Sub Import_Infos()
'Check ob Makro in Export ausgeführt wird und Benachrichtigung+Ende wenn nicht
If ActiveWorkbook.Name = ThisWorkbook.Name Then
MsgBox ("Bitte öffnen Sie den Export und starten das Makro dort erneut.")
Exit Sub
'Ermitteln und speichern des Dateinamens des geöffneten Exports
Else
Dim a As String
a = ActiveWorkbook.Name
End If
'Export nach Nummern in Spalte K sortieren
Range("K1").Select
ActiveWorkbook.Worksheets("Extract").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Extract").Sort.SortFields.Add Key:= _
Range("K1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Impact").Sort
.SetRange Range("A2:O" & Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'Abgleich ob Datum in der Zukunft liegt
Windows(ThisWorkbook.Name).Activate
Sheets("Tabelle3").Select
Dim Zeile As Integer
Dim Ende As Integer
Ende = Sheets("Tabelle3").UsedRange.SpecialCells(xlCellTypeLastCell).Row
For Zeile = 7 To Ende
'Überprüfung ob eine Überschriftenzeile vorliegt. Wenn nein, dann...
If InStr(Cells(Zeile, 2), "|") = 0 Then
'Wenn Datum heute oder in der Zukunft ist, dann ...
If Cells(Zeile, 2) >= Date Then
'... behalte Nummer und gehe in Export
Dim Nummer As String
Nummer = Cells(Zeile, 4)
Dim Zeile2 As Integer
Dim Ende2 As Integer
Windows(a).Activate
Ende2 = Sheets("Extract").UsedRange.SpecialCells(xlCellTypeLastCell).Row
Zeile2 = 1
'Suche Nummer in Spalte K und übergib in Übersicht folgenden Wert:
Do
Zeile2 = Zeile2 + 1
If InStr(Cells(Zeile2, 11), Nummer) > 0 And InStr(Cells(Zeile2 + 1, 11),  _
Nummer) > 0 Then
Windows(ThisWorkbook.Name).Activate
Sheets("Tabelle3").Select
Cells(Zeile, 12) = "There are multiple matches for this Number. Please   _
_
_
check the status manually!"
Range(Cells(Zeile, 12)).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 49407
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Exit Do
'Wenn Nummer einmal vorkommt wird Nummer2 und Status in Übersicht übertragen und weiter mit nä   _
_
_
chster Nummer
ElseIf InStr(Cells(Zeile2, 11), Nummer) > 0 Then
Dim Nummer2 As String
Dim Status As String
Nummer2= Cells(Zeile2, 2)
Status = Cells(Zeile2, 3)
Windows(ThisWorkbook.Name).Activate
Sheets("Tabelle3").Select
Cells(Zeile, 12) = Nummer2
Cells(Zeile, 13) = Status
Exit Do
'Wenn Nummer nicht in der Liste gefunden wird (wir sind in der letzten Suchzeile angekommen)  _
Eintrag in Übersicht
'(Hintergrund rot) und weiter mit nächster Nummer
ElseIf Zeile2 = Ende2 Then
Cells(Zeile, 12) = "No entries available for this number!"
Range(Cells(Zeile, 12)).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Exit Do
'Wenn kein Suchtreffer und noch nicht die letzte Zeile erreicht wurde, wird in die nächste  _
Suchzeile gesprungen.
End If
Loop
'Wenn Überschrift oder Datum in der Vergangenheit Vorliegt, wird in die nächste Zeile  _
gesprungen
End If
Next Zeile
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Suche mit For-Schleife
30.01.2017 10:33:50
Werner
Hallo Sebastian,
vor Next Zeile fehlt ein End If
Ich habe deinen Code mal ein wenig eingekürzt (bei der Farbzuweisung), deine Kommentarzeilen raus geschmissen (nur damit es übersichtlicher wird) und alles sauber eingerückt. So siehst du besser wo noch ein End If fehlt. Die Deklaration der Variablen gehört in den Kopf des Makros, dort habe ich sie jetzt auch hin.
Ich habe mir das Makro jetzt aber nicht näher angeschaut und geprüft, ob es das macht was du willst. Nur mal Änderung in Bezug auf den Fehler Next ohne For.
Sub Import_Infos()
Dim a As String
Dim Zeile As Integer
Dim Ende As Integer
Dim Nummer As String
Dim Zeile2 As Integer
Dim Ende2 As Integer
Dim Nummer2 As String
Dim Status As String
If ActiveWorkbook.Name = ThisWorkbook.Name Then
MsgBox ("Bitte öffnen Sie den Export und starten das Makro dort erneut.")
Exit Sub
Else
a = ActiveWorkbook.Name
End If
Range("K1").Select
ActiveWorkbook.Worksheets("Extract").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Extract").Sort.SortFields.Add Key:= _
Range("K1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Impact").Sort
.SetRange Range("A2:O" & Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.Apply
End With
Windows(ThisWorkbook.Name).Activate
Sheets("Tabelle3").Select
Ende = Sheets("Tabelle3").UsedRange.SpecialCells(xlCellTypeLastCell).Row
For Zeile = 7 To Ende
If InStr(Cells(Zeile, 2), "|") = 0 Then
If Cells(Zeile, 2) >= Date Then
Nummer = Cells(Zeile, 4)
Windows(a).Activate
Ende2 = Sheets("Extract").UsedRange.SpecialCells(xlCellTypeLastCell).Row
Zeile2 = 1
Do
Zeile2 = Zeile2 + 1
If InStr(Cells(Zeile2, 11), Nummer) > 0 And InStr(Cells(Zeile2 + 1, 11), _
Nummer) > 0 Then
Windows(ThisWorkbook.Name).Activate
Sheets("Tabelle3").Select
Cells(Zeile, 12) = "There are multiple matches for this Number. Please  _
check the status manually!"
Range(Cells(Zeile, 12)).Interior.Color = 49407
Exit Do
ElseIf InStr(Cells(Zeile2, 11), Nummer) > 0 Then
Nummer2 = Cells(Zeile2, 2)
Status = Cells(Zeile2, 3)
Windows(ThisWorkbook.Name).Activate
Sheets("Tabelle3").Select
Cells(Zeile, 12) = Nummer2
Cells(Zeile, 13) = Status
Exit Do
ElseIf Zeile2 = Ende2 Then
Cells(Zeile, 12) = "No entries available for this number!"
Range(Cells(Zeile, 12)).Interior.Color = 255
Exit Do
End If
Loop
End If
End If
Next Zeile
End Sub
Gruß Werner
Anzeige
AW: Suche mit For-Schleife
30.01.2017 11:13:23
Sebastian
Hallo und vielen Dank Werner,
der fehlende End if Eintrag war tatsächlich des Rätsels Lösung für die Next Anweisung. Und das Makro scheint auch zu funktionieren. Nur deine gekürzte Farbzuweisug leider nicht. Da bekomme ich den Fehler: Die Methode 'Range' für das Objekt '_Global' ist fehlgeschlagen.
Aber so weit schon mal vielen Dank.
Das kommt von der Betriebsblindheit und unsauberem Einrücken bei der Erstellung.
AW: Suche mit For-Schleife
30.01.2017 12:37:08
Sebastian
Nach einigen Tests, habe ich die Farbgebung nun auch realisieren können (einfach ohne Range).
Allerdings funktioniert leider die Rückmeldung bei negativem Suchergebnis nicht.
Ich bekomme also keinen Text zurück, wenn der Suchbegriff nicht in der Export-Datei gefunden werden konnte (dieser Teil des Makros)
ElseIf Zeile2 = Ende2 Then
Cells(Zeile, 12) = "No entries available for this number!"
Range(Cells(Zeile, 12)).Interior.Color = 255
Exit Do
Kann da evtl. noch mal jemand helfen?
Anzeige
AW: Suche mit For-Schleife
30.01.2017 13:01:27
Sebastian
So auch das hat sich erledigt,
man muss auch in das richtige Fenster wechseln, wenn man dort ein Ergebnis erwartet. Auch im Marko ;-)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige