2016-12-01 2 views
0

У меня есть книга, которую я хочу, когда она открыта, чтобы перейти ко второму листу и прокрутить и выбрать ячейку с текущая дата. Мой код в настоящее время выглядит следующим образом:Автоматическая прокрутка по дате с помощью VBA в Excel: не удается определить время выполнения Ошибка '91'

Private Sub Workbook_Open() 
'Determine date of Sunday in current week 
curDay = Format(Date, "d mmm") 
'Find that date in Sheet 1 Column A 
    With Sheets(2).Columns(5) 
    Set s = .Find(curDay) 
    End With 
Worksheets("Data").Activate 
'Select that cell 
Range(s.Address).Select 
End Sub 

Я получаю сообщение об ошибке: «Ошибка выполнения„91“: переменная объекта или переменная блока не установлена» на второй до последней строки.

Я определенно новичок с этим материалом и искал документацию практически обо всем, что я могу здесь придумать, и не могу понять это. Кто-нибудь знает проблему или лучший способ сделать это? Благодарю.

+0

что произойдет, если вы не находите '.find (curDay)', то 's является Nothing', вам нужно ловить этот случай. Используйте 'If Not s is Nothing then', и следующая строка' s.Select'. 's.Select' - это sams как' Range (s.Address) .Select'. Поскольку вы объявили 's' как диапазон, почему бы просто не выбрать его? –

+0

на самом деле ошибка указывает, что вы ничего не нашли –

+0

дополнительные предложения: добавьте 'Option Explicit' вверху модуля и объявите все переменные с' Dim', например 'Dim curDay as string, s As Range' внутри вашей подпрограммы , Более того, в последней строке достаточно написать 's.Select' –

ответ

0

Я думаю (из изображения, которое вы мне прислали), что ячейки в столбце E (в листе «Данные») являются актуальными датами, но отформатированы, чтобы показать только "d mmm".

Поэтому, при поиске Range для Today, вам необходимо найти подходящее поле для работы Date, а не String.

Примечание: Если ваши ячейки действительны String s представляют дату, это другое дело, и мне нужно изменить мой код ниже.

Код

Option Explicit 

Private Sub Workbook_Open() 

Dim s As Range, FndRng As Range 
Dim curDay As Date 
Dim LastRow As Long 

curDay = Date 

With Sheets("Data") 
    ' find last row with data in Column E 
    LastRow = .Cells(.Rows.Count, "E").End(xlUp).Row 

    ' set the Find search range 
    Set FndRng = .Range("E1:E" & LastRow) 

    Set s = FndRng.Find(What:=curDay, LookIn:=xlFormulas _ 
       , LookAt:=xlWhole, SearchOrder:=xlByRows, _ 
       SearchDirection:=xlNext, MatchCase:=False) 
End With 

' Find was succesful >> found a match for current date 
If Not s Is Nothing Then 
    Worksheets("Data").Activate 
    'Select that cell 
    s.Select 
Else 
    MsgBox curDay & " not found in Column E !" 
End If 

End Sub 
+0

вот скриншот, что происходит: [link] (http://i.imgur.com/CXwvcaX.png) Я очень смущен , вы можете видеть, что ячейка действительно = сегодняшняя дата, код работает и все еще как-то не находит ячейку. Я нахожусь на правильном рабочем столе, в правой колонке ... есть что-то, чего я не хватает? – Sean

+0

@ Просматривайте, что происходит? Я не могу сказать из этого образа? приведенный выше код работает?вы не используете приведенный выше код, посмотрите в моем коде 'curDay = Date', а не' curDay = Format (Date, "D mmm") ' –

+0

моя ошибка. вот обновленное изображение: [link] (http://i.imgur.com/jwaNmvX.png) Текущая ячейка, выбранная в листе «Данные», в столбце E равна TODAY(). Я запустил ваш код, и он по-прежнему возвращает «12/1/16 не найден», несмотря на то, что очень ясно, что дата на самом деле там. – Sean

Смежные вопросы