Ich habe vor kurzem an einem alten Projekt eines Kollegen gearbeitet, um Bugs loszuwerden. Hauptproblem ist, dass er in einem Sub einige Zahlen auf Blättern zählt. Aber bis ich zurückgesetzt, pausiert und den Code zurückgesetzt habe, zählt er nichts. Nach einigen Stunden wurde mir klar, dass er die erste Zeile gar nicht erst findet, dass starrow und endrow als Nothing zurückgegeben werden. ( startdate und endDate sind fein und gefüllt)Range.Find wird nicht gefunden, bis Makro zurückgesetzt, pausiert und wieder zurückgesetzt wird
Aber wenn ich zurückzusetzen, anhalten und den Code manuell zurückgesetzt wieder (über die VBA-Steuerelemente), dann funktioniert es ganz gut, auch wenn ich Blätter ändern usw. Nur wenn ich schließe und öffne es da ist dieser Bug wieder (ja ich habe versucht das Makro zu deaktivieren, hat nicht geholfen).
Dim startDate As String, endDate As String
For i = 1 To UBound(auftraegeVar, 1)
' Adopt range to be looked in for each order according to user specified months
Set startrow = Worksheets(auftraegeVar(i)).Range("A1:A200").Find(what:=startDate, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
Set endrow = Worksheets(auftraegeVar(i)).Range("A1:A200").Find(what:=endDate, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
Next i
Edit: Hier ist das Modul, nachdem sie die Änderungen zu übernehmen, die vorgeschlagen @shairado. Alles läuft gut, wenn Starrow und Endrow Bereiche sind und mit Set wie oben (abgesehen von der Tatsache, dass er sie immer als nichts setzt [ich beobachtete die Variablen], außer ich setze die Makros zurück, pausiere und setze sie zurück). Aber jetzt (Wenn Rückkehr nichts finden, erhalte ich die Fehler 91 auf find (bla) .row daher das, wenn ein Teil)
Public Sub HourCounting(auftraegeVar As Variant)
Dim indices As Range
Dim startrow As Integer, endrow As Integer
Dim startDate As String, endDate As String
'Do stuff that works
' Get start and end month in which to look for names
startDate = Worksheets("Main").cmbPastDate.Value
endDate = Worksheets("Main").cmbCurrentDate.Value
' Get start and end month in which to look for names
startDate = CDate(Worksheets("Main").cmbPastDate.Value)
endDate = CDate(Worksheets("Main").cmbCurrentDate.Value)
' ------------------- Search in all the workbooks for names, orders and months -------------------
For i = 1 To UBound(auftraegeVar, 1)
' Adopt range to be looked in for each order according to user specified months
If Worksheets(auftraegeVar(i)).Range("A:A").Find(what:=startDate, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) Is Nothing Then
startrow = 0
Else
startrow = Worksheets(auftraegeVar(i)).Range("A:A").Find(what:=startDate, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).row
End If
If Worksheets(auftraegeVar(i)).Range("A:A").Find(what:=endDate, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) Is Nothing Then
endrow = 0
Else
endrow = Worksheets(auftraegeVar(i)).Range("A:A").Find(what:=endDate, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).row
End If
' Do stuff in Loops that works
Next i
End Sub
Das Arbeitsblatt enthält auf der A1: A200 Formeln, die die erste eines bestimmten Monats zurückgibt . Es ist so formatiert, dass nur MMM YY angezeigt wird. Dies ist die gleiche Struktur wie meine searchTerms (startDate und endDate). Wenn ich die Suche manuell versuche, funktioniert es.
Nur für den Fall: auftraegeVar ist auch nicht leer und gibt die richtigen Arbeitsblattnamen –
nach Ihrem Code 'starrow' und' nendrow' sind 'Range's, oder? weil du das 'Set' benutzt. Willst du die Zeile wirklich finden, dann benutze 'starrow = Worksheets (auftraegeVar (i)). Range (" A1: A200 "). Finde (was: = startDate, LookIn: = xlValues, LookAt: = xlWhole, MatchCase: = Falsch) .Row' und definiere 'Dim starrow As Long' –
Mein Verdacht geht an den * im Hintergrund laufenden * idleTimer *. Was ist das> einige VBA-Code beim Start gestartet? Könnten Sie bitte weitere Einzelheiten angeben? –