Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/40: Рейтинг темы: голосов - 40, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 17.01.2014
Сообщений: 20
1

Не работает поиск даты через функцию Find

10.07.2014, 10:24. Показов 8047. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Записью макроса записал поиск даты:
Visual Basic
1
2
3
    Cells.Find(What:="07.07*", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
Но если после этого запустить макрос, выдает ошибку Object variable with block variable not set.
В чем проблема?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2014, 10:24
Ответы с готовыми решениями:

систему уравнений через solve block и функцию Find(); через функцию lslove
4x + 3y=5 5x+4z=7 2x+y+2z=8 помогите, у меня не получается, по скрину ниже видно

Не работает поиск в Recordset, метод Find
Господа программисты, возникла вот какая проблема: В ДAO рaбoтaет RS.FindFirst...

Решение системы уравнений через функцию Find
Всем привет! Решаю систему из 4ех уравнений с 4мя неизвестными. Mathcad выводит решение, но если...

Поиск значения в ячейке А1 через Cells.Find
Привет. Никак не могу понять, как через Cells.Find найти значение в ячейке А1. Какой параметр надо...

6
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
10.07.2014, 11:24 2
Не находит.
Вообще поиск дат через find кодом глючный. Точную дату ещё можно найти, а вот так думаю не получится... Но может кто подскажет какой вариант, а я бы поменял алгоритм.
0
Заблокирован
10.07.2014, 12:04 3
Visual Basic
1
2
3
4
    Application.FindFormat.NumberFormat = "dd/mm;@"
    Cells.Find(What:="07.07", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=True).Activate
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
10.07.2014, 12:11 4
У меня этот FindFormat не работает...
0
6081 / 1325 / 195
Регистрация: 12.12.2012
Сообщений: 1,023
10.07.2014, 12:13 5
Лучший ответ Сообщение было отмечено landromat как решение

Решение

Здравствуйте, landromat,
Дело в том, что в офисе настолько много настроек и особенностей, что даже макрорекордер не всегда в состоянии учесть все эти особенности и, соответственно, сгенерировать работающий код. В данном случае он не учитывает особенности конкретной языковой локализации.

Кроме того, он не в состоянии думать за вас. Он не может подумать "а что делать, если такой даты на листе не будет?". А ведь если такой даты не будет, то при попытке активировать несущствующую ячейку, естественно, сгенерируется ошибка.

В общем, исправил предложенную макрорекордером программу с учетом всех этих особенностей.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Sub FindDate()
    Dim mth As Integer, day As Integer, d As Date, rng As Range
    Dim shablon As String, notFoundMsg As String, firstfindAddr As String
    mth = 7: day = 7
    'Внутреннее представление даты в VBA - #[месяц]/[день]/[год]#, с наклонной чертой
    'в качестве разделителя. Следовательно, для поиска 7 июля задаем шаблон 7/7/.
    d = DateSerial(1900, mth, day)
    shablon = Format(d, "m\/d\/")
    Set rng = Cells.Find(What:=shablon, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, _
    SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
    'После выполнения операции Find надо обязательно проверить, не вернула ли она пустую ссылку.
    'Это может произойти, если на листе нет ни одной удовлетворяющей критериям поиска ячейки.
    notFoundMsg = "Дата " & Format(d, "dd/mm/XXXX") & " не найдена."
    If rng Is Nothing Then
        MsgBox notFoundMsg
        Exit Sub
    End If
    'Если окажется, что найденное значение - не дата, а хитро составленная злоумышленником строка,
    'например, "777/7/foo" - ищем дальше, пока не найдем дату или не переберем все подходящие ячейки.
    firstfindAddr = rng.Address
    While TypeName(rng.Value) <> "Date"
        Set rng = Cells.Find(What:=shablon, After:=rng, LookIn:=xlFormulas, LookAt:=xlPart, _
        SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
        If rng.Address = firstfindAddr Then
            MsgBox notFoundMsg
            Exit Sub
        End If
    Wend
    rng.Activate
End Sub
С уважением,
Aksima
4
Заблокирован
10.07.2014, 12:33 6
Кстати да, формат даты в разных языковых стандартах может представлятся по разному
в VB6 по этой же причине, не работает встроенный Package
я решил ту проблему изменив представление дат, обычной конвертацией
(меня забанили по причине что спёр эту идею и присвоил свой копирайт, ну это все лирика..)
0
0 / 0 / 0
Регистрация: 17.01.2014
Сообщений: 20
10.07.2014, 12:47  [ТС] 7
Спасибо большое! Буду исправлять.
0
10.07.2014, 12:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.07.2014, 12:47
Помогаю со студенческими работами здесь

Поиск в документе Word через Find, но с конца документа к его началу
Здравствуйте, как организовть поиск в документе Ворд Финдом но с конца документа к его началу ...

Поиск максимума в массиве через отдельную функцию
Здравствуйте. Нужно сделать поиск максимального элемента в массиве отдельной функцией. Вроде...

Как сделать через VBA поиск по полю "Дата" в Excel не полной даты?
Буду очень признателен за помощь, прошу прощения если это обсуждалось, но поиск не работает,...

Выборка данных через сравнение даты в DataGridView и текущей даты
Ситуация такова: в датагриде есть столбец с определенной датой. Нужно сравнить все даты с этого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru