2017-01-26 20 views
0

Недавно я получил работу над старым проектом коллеги, чтобы избавиться от ошибок. Основная проблема заключается в том, что в одном Sub он будет подсчитывать некоторые числа на листах. Но пока я не сброшу, приостановил и сбросил код, он ничего не считает. Через несколько часов я понял, что он даже не находит начальную строку в первую очередь, что startrow и endrow возвращаются как ничто. ( STARTDATE и ENDDATE прекрасны и заполнены)Range.Find не находит, пока makro не сбрасывается, не приостанавливается и не возвращается снова

Но если сбросить, пауза и сброс кода снова вручную (через элементы управления VBA), то она работает просто отлично, даже если я изменить листы и т.д. Только если Я закрываю и открываю его, снова появляется эта ошибка (да я пробовал деактивировать открытие макро, не помогло).

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: Вот модуль после применения изменений, предложенных @shairado. Все работает нормально, когда startrow и endrow являются диапазонами и с Set, как указано выше (за исключением того факта, что он всегда устанавливал их как ничто [я видел переменные], кроме сброса, паузы и сброса макросов). Но теперь (если найти возвращает ничего, я получаю ошибку 91 на FIND (ла) .row, поэтому если часть)

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 

В электронной таблице содержится в A1: A200 формула, которая возвращает первое из определенного месяца , Отформатирован для отображения только MMM YY. Это та же структура, что и мои поисковые службы (startDate и endDate). Если я попытаюсь выполнить поиск вручную, он работает.

+0

На всякий случай: auftraegeVar не пуст и дает правильные имена рабочих листов –

+0

в соответствии с вашим кодом 'startrow' и' endrow' являются 'Range's, правильно? потому что вы используете 'Set'. Если вы действительно хотите найти строку, используйте «startrow = Worksheets (auftraegeVar (i)). Range (« A1: A200 »). Найдите (что: = startDate, LookIn: = xlValues, LookAt: = xlWhole, MatchCase: = False) .Row', и определите 'Dim startrow As Long' –

+0

Мои подозрения идут к этому * idleTimer, работающему в фоновом режиме *. Что это такое> какой-то код VBA запущен в startupt? Не могли бы вы предоставить более подробную информацию? –

ответ

0

Обнаружена ошибка: Тип-несоответствие со значениями в найденном диапазоне. Уф. Я выпью кофе. Спасибо за помощь :)