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

for next schleife trotz fehlendem wert fortsetzen

for next schleife trotz fehlendem wert fortsetzen
12.12.2023 20:39:08
Harry213
Guten Abend,

ich habe eine Frage zu einer For Next Schleife.
ich suche mit einer solchen Schleife in einer geschlossenen Datei nach einem Datum, um dann die dazugehörigen Werte zu kopieren und in die Datei zu übertragen, in der das Makro ausgeführt wird. Nun habe ich das Problem, dass das Makro in den Debug-Modus geht (Laufzeitfehler 9), wenn das gesuchte Datum in der Quelldatei nicht vorhanden ist.
Dann soll eine Nachricht erzeugt werden und die Suche soll mit der nächsten Zeile weitergehen
Meine Idee mit If Not ... Then Next funktioniert leider nicht.
Hat vielleicht jemand eine Idee?
hier mal ein Ausschnitt des Codes (wenn das gesuchte Datum vorhanden ist, funktioniert alles einwandfrei)

Option Explicit

Sub daten_import()

Dim rng As Range
Dim j As Integer
Dim i As Date 'zu suchendes Datum
Dim s As String 'Name des zu durchsuchenden Tabellenblattes
Dim sPfad As String
Dim lngZeile As Long
Dim lngZeileMax As Long
Dim wkbZiel As Workbook

Set wkbZiel = ThisWorkbook

With Tabelle4
For lngZeile = 1 To lngZeileMax

. ' Quelldatei wird im Hintergrund geöffnet
. ' das entsprechende Tabellenblatt wird ausgewählt

. ' dann beginnt die Suche

Set rng = ActiveSheet.Cells.Find(what:=i, lookat:=xlWhole, LookIn:=xlValues)
If Not i Then
MsgBox "Für" & Space(1) & (s) & Space(1) & "sind zum gesuchten Datum keine Eintragungen vorhanden"
Next lngZeile

Vielen Dank schonmal
Harry

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: for next schleife trotz fehlendem wert fortsetzen
12.12.2023 21:08:15
JoWE
Hallo Harry,
informiere Dich über das Thema "Fehlerbehandlung", Stichwort "on Error goto..."
Damit lässt sich ein solcher Fehler elegant
überspringen. z.B. in einer Fehlerbehandlungsroutine mit dem Befehl "resume next".
Siehe auch hier:
https://www.vba-tutorial.de/fehler/fehlerbehandlung.htm

Gruß
Jochen
AW: for next schleife trotz fehlendem wert fortsetzen
13.12.2023 03:14:41
onur
Nicht
If Not i Then

sondern
If Not rng IS NOTHING Then


Aber warum wird die Datei innerhalb der Schleife geöffnet (also -zig mal) ??? Die musst du öffnen, BEVOR die Schleife beginnt.
Anzeige
AW: for next schleife trotz fehlendem wert fortsetzen
13.12.2023 17:18:51
Piet
Hallo

statt ActiceSheet mit Select auswählen kannst du das gewünschte Sheet direkt als Tabelle angeben. (ggf. mit Workbook)
Set rng = ActiveWorkbook.Worksheets(xxxx).Cells.Find usw.

Varible kann man deklarieren wie man will. Ich habe mir angewöhnt alle 1stelligen Buchstaben nur für Zahlen zu benutzen!
Für Datum schreibe ich Datum as Date, statt s nehme ich immer Txt as String, oder Strg as String bei zwei verschiedenen Texten.

mfg Piet
AW: for next schleife trotz fehlendem wert fortsetzen
13.12.2023 21:19:56
Yal
Hallo Harry,

ein paar Tipps:
verwende sprechende Variablenname. "lng" als Präfix ist sinnlos, wenn daneben "i" ein Datum und "s" ein Blattname sein sollen.
Poste immer Anfang und Ende: Ein "Sub" hat einen "End Sub", ein "With" einen "End With", ein "If" einen "End If", usw.
achte auf ein sauberes Einrücken!

Es könnte so aussehen:
Sub Daten_importieren()

'In der Reihenfolge des Erscheinens:
Dim AktZeile As Long
Dim LetzteZeile As Long
Dim Datum As Date 'zu suchendes Datum
Dim DateiPfad As String
Dim BlattName As String 'Name des zu durchsuchenden Tabellenblattes
Dim wbkQuelle As Workbook
Dim Treffer As Range

With ThisWorkbook.Worksheets("Tabelle4")
LetzteZeile = .UsedRange.spcialcells(xlCellTypeLastCell).Row
On Error Resume Next
For AktZeile = 1 To LetzteZeile
Datum = .Cells(AktZeile, "C").Value
DateiPfad = .Cells(AktZeile, "D").Value
BlattName = .Cells(AktZeile, "E").Value
Set wbkQuelle = Workbooks.Open(DateiPfad)

Set Treffer = Nothing
Set Treffer = wbkQuelle.Worksheets(BlattName).Find(what:=Datum, lookat:=xlWhole, LookIn:=xlValues)
If Treffer Is Nothing Then
MsgBox "Für " & BlattName & " sind zum gesuchten Datum keine Eintragungen vorhanden"
Else
.Cells(AktZeile, "G").Resize(1, 5).Value = Treffer.EntireRow.Range("G1:K1").Value
End If
wbkQuelle.Close
Next AktZeile
End With
End Sub


VG
Yal
Anzeige
AW: for next schleife trotz fehlendem wert fortsetzen
14.12.2023 20:31:40
Harry213
Guten Abend,

allen Tippgebern erstmal vielen Dank dafür und entschuldigt bitte, dass ich erst jetzt dazu komme, euch zu antworten.
Ich habe letztendlich aus allen Tipps das für mich am besten passende oder im Fall von Yal, was ich am ehesten nachvollziehen konnte, in meinen Code eingebaut.
Der Tipp von Onur, das öffne der Quelldatei vor der Schleife auszuführen ist eigentlich total logisch und hat die Laufzeit des Makros signifikant verkürzt. Durch diese neue Geschwindigkeit kommt es jedoch zu einem sehr schnellen flackern des Bildschirms während das Makro läuft. Hat jemand eine Idee, wie man das abstellen kann?
Anbei nun den kompletten Code und vielen Dank schonmal fürs nachdenken (die ganzen Kommentierungen sind eher für mich, um den Code auch nach längerer Zeit nachvollziehen zu können)

Sub Daten_Import()


Dim Treffer As Range
Dim Hilfswert As Integer
Dim Datum As Date
Dim BlattName As String
Dim DateiPfad As String
Dim DateiName As String
Dim AktZeile As Long
Dim letzteZeile As Long
Dim wkbQuelle As Workbook

'Quelldatei
DateiPfad = "C:\...\...\...\"
DateiName = "........."

With Tabelle4 'Hilfstabelle

'bisherige Einträge löschen
.Range("A1:N75").ClearContents
'Öffnen der Quelldatei im Hintergrund
Set wkbQuelle = Workbooks.Open(DateiPfad & DateiName)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
letzteZeile = .UsedRange.Rows.Count 'letzte benutzte Zeile der Zieldatei (Hilfstabelle)
'bei fehlenden Werten die Suche fortsetzen
On Error Resume Next
For AktZeile = 1 To letzteZeile 'festlegen der Schleife (von der ersten Zeile bis zur letzten benutzten Zeile)
'Hilfswert zum Beenden der Schleife, wenn keine Daten in Hilfstabelle vorhanden sind
Hilfswert = .Cells(AktZeile, 22).Value
If Hilfswert = 1 Then
Workbooks(DateiName).Close SaveChanges:=False
Exit Sub
Else
BlattName = .Cells(AktZeile, 20).Value 'Name des Tabellenblattes in der Quelldatei, in dem die Daten gesucht werden sollen
Datum = .Cells(AktZeile, 21).Value 'Datum nach dem gesucht werden soll
'in dem den aktuellen Suchparametern entsprechenden Tabellenblatt nach dem Datum suchen
Set Treffer = Worksheets(BlattName).Cells.Find(what:=Datum, lookat:=xlWhole, LookIn:=xlValues)
If Treffer Is Nothing Then
MsgBox "Für den " & Datum & " sind bei " & BlattName & " keine Daten vorhanden"
Else
'zum gesuchten Datum gehörenden Bereich, kopieren
Treffer.Columns("B:O").Copy
'und in der Zieldatei (Hilfstabelle) in der den Suchparametern entsprechenden Zeile eintragen
ThisWorkbook.Sheets("Hilfstabelle").Cells(AktZeile, 1).PasteSpecial xlPasteValues
End If
'Zwischspeicher leeren
Application.CutCopyMode = False
End If
'Suche mit den nächsten Parametern aus Zieldatei (Hilfstabelle) fortsetzen
Next AktZeile
'Quelldatei schließen ohne zu speichern
Workbooks(DateiName).Close SaveChanges:=False
End With
End Sub
Anzeige
AW: for next schleife trotz fehlendem wert fortsetzen
14.12.2023 20:35:49
onur
Sub Daten_importieren()

Application.ScreenUpdating = False
.....
....
....
....
Application.ScreenUpdating = True
End Sub
AW: for next schleife trotz fehlendem wert fortsetzen
15.12.2023 17:41:57
Harry213
Hallo Onur,

vielen Dank es funktioniert wunderbar.

Gruß

Harry
Gerne !
15.12.2023 19:22:10
onur

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige