Range.Find - ошибка при открытии книги Excel - VB

Узнай цену своей работы

Формулировка задачи:

Ошибка в самом конце кода. использую функцию .find для нахождения ячеек по их значению. Поиск всегда идет в 2 листах эксель из 2 книг.
  • По сути это один и тот же документ, только версии от разных дат. цель программы - сравнить изменения.
  • Поиск всегда идет одновременно по 2 книгам.
  1. Когда поиск идет вида A5:A25 все в полном порядке.
    Visual Basic
  2. Но когда я пытаюсь использовать адресацию вида R1C1 начинаются проблемы.
    • с этой строкой все ОК (objExcelNew это 1я книга, которая открывается) [строка 45 в коде снизу]
      Visual Basic
    • А ТУТ ОШИБКА: (во вложении скрин) [строка 51 в коде снизу]
      Visual Basic
      Т.е. почему-то в 1м объекте excel все в порядке, а во 2м поиск не проходит.

      ОДНАКО! Если использовать изврат,

      то ошибки нету.
      Visual Basic
Собственно кусок кода:
Листинг программы
  1. Private Sub SravnitButtonVPuti()
  2. Dim objExcelNew As New Excel.Application
  3. Dim objExcelOld As New Excel.Application
  4. 'открываем файлы
  5. objExcelNew.Workbooks.Open TextNew.Text, ReadOnly:=True
  6. objExcelNew.Visible = True
  7. objExcelOld.Workbooks.Open TextOld.Text, ReadOnly:=True
  8. objExcelOld.Visible = True
  9.  
  10. 'Задаем переменные для имен листов
  11. NEW_Sheet = ComboNew.Text
  12. OLD_Sheet = ComboOld.Text
  13. 'Активируем сравниваемые листы
  14. objExcelOld.Worksheets(OLD_Sheet).Activate
  15. objExcelNew.Worksheets(NEW_Sheet).Activate
  16. ТУТ ВСЕ ОК - ПОИСК ИДЕТ ЧЕРЕЗ БУКВЕННЫЙ ДИАПАЗОН ВИДА A5:A25
  17. '=================================== Находим начальные данные для сравнения (общий итог, первый столбец с данными и т.д.) ============
  18. '---Находим _ряд_ "Общий итог"
  19. Set ItogoRowNEW_search = objExcelNew.Worksheets(NEW_Sheet).Range("a9:a15000").Find("Общий итог")
  20. Set ItogoRowOLD_search = objExcelOld.Worksheets(OLD_Sheet).Range("a9:a15000").Find("Общий итог")
  21. 'Задаем переменные для запоминания номера ряда ОБЩЕГО ИТОГА
  22. Dim ItogoRowNEW As Integer, ItogoRowOLD As Integer
  23. ItogoRowNEW = ItogoRowNEW_search.Row
  24. ItogoRowOLD = ItogoRowOLD_search.Row
  25. '---
  26. '---Находим _столбец_ "Общий итог" (тот что справа в конце документа)
  27. Set ItogoColumnNEW_search = objExcelNew.Worksheets(NEW_Sheet).Range("a8:fff8").Find("Общий итог")
  28. Set ItogoColumnOLD_search = objExcelOld.Worksheets(OLD_Sheet).Range("a8:fff8").Find("Общий итог")
  29. 'Задаем переменные для запоминания номера столбца ОБЩЕГО ИТОГА (того что справа в конце документа)
  30. Dim ItogoColumnNEW As Integer, ItogoColumnOLD As Integer
  31. ItogoColumnNEW = ItogoColumnNEW_search.Column
  32. ItogoColumnOLD = ItogoColumnOLD_search.Column
  33. '---
  34. '---Находим начальную строку "№стройки Итог"
  35. Set Initial_StroikaRow_NEW_search = Range(objExcelNew.Worksheets(NEW_Sheet).Cells(8, 1), objExcelNew.Worksheets(NEW_Sheet).Cells(ItogoRowNEW, 1)).Find("* итог")
  36. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  37. А ТУТ ОШИБКА: (во вложении скрин)
  38. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  39. Set Initial_StroikaRow_OLD_search = Range(objExcelOld.Worksheets(OLD_Sheet).Cells(8, 1), objExcelOld.Worksheets(OLD_Sheet).Cells(ItogoRowOLD, 1)).Find("* итог")

Решение задачи: «Range.Find - ошибка при открытии книги Excel»

textual
Листинг программы
  1. 1   ActiveWorkbook.Worksheets(OLD_Sheet).Cells(8, 1).resize(10).Find("20*")

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы