Новости:

Интересные и полезные статьи по работе с Excel и VBA
можно найти в разделе ХИТРОСТИ

Главное меню

Не срабатывает поиск в макросе VBA

Автор jacks0n, 25.07.2024, 13:07:46

« назад - далее »

jacks0n

Здравствуйте.
Прошу помочь с макросом. Не работает поиск, вот часть кода:

    sDate_svodka = InputBox("Введите дату файла сводки", "Ввод даты", Date - 1)
    dDate = CDate(sDate_svodka)

    ' Форматируем dDate в нужный формат
    formattedDate = Format(dDate, "dd.mm.yy")
'    MsgBox formattedDate

    Set oRow = ws.Range("NA10:TH10")
'    oRow.Select
    Set oCell = oRow.Find(What:="23.07.24", LookIn:=xlValues, LookAt:=xlPart, _
                     SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                     MatchCase:=False, SearchFormat:=False)
                     
                   
                     
'    oCell.Select
    dateCol = oCell.Column

В файле в строке 10 находятся даты в формате 23.07.24, т.е. "dd.mm.yy", необходимо найти номер колонки.
В макросе поиск не срабатывает ни по переменной sDate_svodka, ни по dDate, ни по formattedDate. Не работает даже  так - "23.07.24". Поиск вручную в файле срабатывает при поиске в формате "23.07.24".
Я уже перепробовал все варианты, до которых додумался, ничего пока не получилось. Подобная конструкция успешно работает в других макросах а здесь никак.
Помогите советом, пожалуйста

Если нужно, я приложу весь макрос, там из одного файла копируются два диапазоны по условию и вставляются в другой файл для дальнейшей обработки. Так вот первый диапазон успешно копи-пастится, а второй не может найти нужную колонку.


Дмитрий Щербаков(The_Prist)

Убедитесь, что в dDate дата конвертируется корректно.
Если все правильно, то следующий этап - попробовать искать так:
dDate = CDate(sDate_svodka)
' Форматируем dDate в нужный формат
  Dim ld As Long
  ld= CLng(dDate)
'    MsgBox formattedDate

    Set oRow = ws.Range("NA10:TH10")
'    oRow.Select
    Set oCell = oRow.Find(What:=ld, LookIn:=xlValues, LookAt:=xlPart, _
                     SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                     MatchCase:=False, SearchFormat:=False)
Так же не мешает убедиться, что в таблице дата записана без времени - иначе искать надо будет не целое число, а дробное(CDbl).
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

jacks0n

Всем спасибо за внимание.
Играться с поиском притомился, перебрал все варианты, которые мог придумать. Форматировал дату для поиска и так и эдак. Надоело.
Проблему решил так:
    Set oRow = ws.Range("NA10:TH10")
   
    For Each oCell In oRow
        dateCol = oCell.Column
        If oCell.Value = dDate Then
'            Debug.Print oCell.Column, oCell.Value
            Exit For
        End If
    Next oCell
Заработало с полоборота.

Яндекс.Метрика Рейтинг@Mail.ru