Недавно я получил работу над старым проектом коллеги, чтобы избавиться от ошибок. Основная проблема заключается в том, что в одном 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). Если я попытаюсь выполнить поиск вручную, он работает.
На всякий случай: auftraegeVar не пуст и дает правильные имена рабочих листов –
в соответствии с вашим кодом 'startrow' и' endrow' являются 'Range's, правильно? потому что вы используете 'Set'. Если вы действительно хотите найти строку, используйте «startrow = Worksheets (auftraegeVar (i)). Range (« A1: A200 »). Найдите (что: = startDate, LookIn: = xlValues, LookAt: = xlWhole, MatchCase: = False) .Row', и определите 'Dim startrow As Long' –
Мои подозрения идут к этому * idleTimer, работающему в фоновом режиме *. Что это такое> какой-то код VBA запущен в startupt? Не могли бы вы предоставить более подробную информацию? –