2017-01-26 10 views
0

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.

+0

Nur für den Fall: auftraegeVar ist auch nicht leer und gibt die richtigen Arbeitsblattnamen –

+0

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' –

+0

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? –

Antwort

0

Der Fehler gefunden: Typ-Mismatch mit den Werten im gesuchten Bereich. Puh. Ich werde mir einen Kaffee holen. Danke für Ihre Hilfe :)

Verwandte Themen