Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/14: Рейтинг темы: голосов - 14, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 11.03.2011
Сообщений: 19

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

10.05.2011, 10:36. Показов 2762. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ошибка в самом конце кода. использую функцию .find для нахождения ячеек по их значению.
Поиск всегда идет в 2 листах эксель из 2 книг.
  • По сути это один и тот же документ, только версии от разных дат. цель программы - сравнить изменения.
  • Поиск всегда идет одновременно по 2 книгам.
  1. Когда поиск идет вида A5:A25 все в полном порядке.
    Visual Basic
    1
    2
    
    Set ItogoRowNEW_search = objExcelNew.Worksheets(NEW_Sheet).Range("a9:a15000").Find("Общий итог")
    Set ItogoRowOLD_search = objExcelOld.Worksheets(OLD_Sheet).Range("a9:a15000").Find("Общий итог")
  2. Но когда я пытаюсь использовать адресацию вида R1C1 начинаются проблемы.
    • с этой строкой все ОК (objExcelNew это 1я книга, которая открывается) [строка 45 в коде снизу]
      Visual Basic
      1
      
      Set Initial_StroikaRow_NEW_search = Range(objExcelNew.Worksheets(NEW_Sheet).Cells(8, 1), objExcelNew.Worksheets(NEW_Sheet).Cells(ItogoRowNEW, 1)).Find("* итог")
    • А ТУТ ОШИБКА: (во вложении скрин) [строка 51 в коде снизу]
      Visual Basic
      1
      
      Set Initial_StroikaRow_OLD_search = Range(objExcelOld.Worksheets(OLD_Sheet).Cells(8, 1), objExcelOld.Worksheets(OLD_Sheet).Cells(ItogoRowOLD, 1)).Find("* итог")
      Т.е. почему-то в 1м объекте excel все в порядке, а во 2м поиск не проходит.

      ОДНАКО! Если использовать изврат, то ошибки нету.
      Visual Basic
      1
      2
      
      turbo_string = "A8:A" + CStr(ItogoRowOLD)
      Set Initial_StroikaRow_OLD_search = Range(turbo_string).Find("* итог")

Собственно кусок кода:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Private Sub SravnitButtonVPuti()
 
Dim objExcelNew As New Excel.Application
Dim objExcelOld As New Excel.Application
 
'открываем файлы
objExcelNew.Workbooks.Open TextNew.Text, ReadOnly:=True
objExcelNew.Visible = True
 
objExcelOld.Workbooks.Open TextOld.Text, ReadOnly:=True
objExcelOld.Visible = True
 
 
'Задаем переменные для имен листов
NEW_Sheet = ComboNew.Text
OLD_Sheet = ComboOld.Text
 
'Активируем сравниваемые листы
objExcelOld.Worksheets(OLD_Sheet).Activate
objExcelNew.Worksheets(NEW_Sheet).Activate
 
ТУТ ВСЕ ОК - ПОИСК ИДЕТ ЧЕРЕЗ БУКВЕННЫЙ ДИАПАЗОН ВИДА  A5:A25
 
'=================================== Находим начальные данные для сравнения (общий итог, первый столбец с данными и т.д.) ============
'---Находим _ряд_ "Общий итог"
Set ItogoRowNEW_search = objExcelNew.Worksheets(NEW_Sheet).Range("a9:a15000").Find("Общий итог")
Set ItogoRowOLD_search = objExcelOld.Worksheets(OLD_Sheet).Range("a9:a15000").Find("Общий итог")
    'Задаем переменные для запоминания номера ряда ОБЩЕГО ИТОГА
    Dim ItogoRowNEW As Integer, ItogoRowOLD As Integer
    ItogoRowNEW = ItogoRowNEW_search.Row
    ItogoRowOLD = ItogoRowOLD_search.Row
'---
 
'---Находим _столбец_ "Общий итог" (тот что справа в конце документа)
Set ItogoColumnNEW_search = objExcelNew.Worksheets(NEW_Sheet).Range("a8:fff8").Find("Общий итог")
Set ItogoColumnOLD_search = objExcelOld.Worksheets(OLD_Sheet).Range("a8:fff8").Find("Общий итог")
    'Задаем переменные для запоминания номера столбца ОБЩЕГО ИТОГА (того что справа в конце документа)
    Dim ItogoColumnNEW As Integer, ItogoColumnOLD As Integer
    ItogoColumnNEW = ItogoColumnNEW_search.Column
    ItogoColumnOLD = ItogoColumnOLD_search.Column
'---
 
'---Находим начальную строку "№стройки Итог"
Set Initial_StroikaRow_NEW_search = Range(objExcelNew.Worksheets(NEW_Sheet).Cells(8, 1), objExcelNew.Worksheets(NEW_Sheet).Cells(ItogoRowNEW, 1)).Find("* итог")
 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
А ТУТ ОШИБКА: (во вложении скрин)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
Set Initial_StroikaRow_OLD_search = Range(objExcelOld.Worksheets(OLD_Sheet).Cells(8, 1), objExcelOld.Worksheets(OLD_Sheet).Cells(ItogoRowOLD, 1)).Find("* итог")
Миниатюры
Range.Find - ошибка при открытии книги Excel  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.05.2011, 10:36
Ответы с готовыми решениями:

Управление макросами при открытии книги Excel
Доброго всем времени суток. Вопрос звучит так: как сделать так, чтобы при открытии книги, в случае если пользователь разрешил запустить...

Метод Range.Find(Excel)
Доброго времени суток! Суть проблемы такова, есть список товаров, у которых есть артикул и чтобы искать этот товар по артикулу, мной была...

Excel VBA. Выбор вкладки главного меню при открытии книги
Добрый день Знатоки. Подскажите пожалуйста, как при открытии книги сделать переключение заглавного меню с вкладки "Главная"...

5
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
10.05.2011, 11:38
Попробуй такой вариант:
Visual Basic
1
Range("a9:a15000")=Range(Cells(9,1), Cells(15000,1))
0
0 / 0 / 0
Регистрация: 11.03.2011
Сообщений: 19
10.05.2011, 11:56  [ТС]
поменял проблемную строку на
Visual Basic
1
Set Initial_StroikaRow_OLD_search = objExcelOld.Worksheets(OLD_Sheet).Range(Cells(8, 1), Cells(ItogoRowNEW, 1)).Find("* итог")
на всякий пожарный, ибо:

в этой теме Range.Find метод не работает при адресации ячеек r1c1 - error 1004
модератор "аналитика посоветовал использовать .cell каждый раз указывая к кому объекту .cell принадлежит.


в таком случае вылетает ошибка 1004
Миниатюры
Range.Find - ошибка при открытии книги Excel  
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
10.05.2011, 12:20
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Там так же предлагался вариант:
Visual Basic
1
1   ActiveWorkbook.Worksheets(OLD_Sheet).Cells(8, 1).resize(10).Find("20*")
Добавлено через 14 минут
можно попробовать такой вариант
Visual Basic
1
.Range("a9:a" & ItogoRowNEW)
1
0 / 0 / 0
Регистрация: 11.03.2011
Сообщений: 19
10.05.2011, 13:45  [ТС]
попробовал такую строку вместо проблемной:
Visual Basic
1
Set Initial_StroikaRow_OLD_search = objExcelOld.Worksheets(OLD_Sheet).Cells(8, 1).Resize(ItogoRowOLD).Find("* итог")
В этом месте все заработало, спасибо.

Встает другой вопрос - даже если использовать такой метод, то:
  1. как мне с помощью переменных, менять размер диапазона в ширину? с помощью .resize он изменяется только в высоту как я понял.

Все равно хочу понять, почему возникает ошибка в книге Old? ведь в New все проходит отлично
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
10.05.2011, 13:51
Visual Basic
1
resize(10,10)
Добавлено через 2 минуты
Все равно хочу понять, почему возникает ошибка в книге Old? ведь в New все проходит отлично
По видимому всё дело в том, какая книга активна. ИМХО
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.05.2011, 13:51
Помогаю со студенческими работами здесь

Ошибка при повторном открытии книги
У мея есть код, написан на VBA в Excel 2010. Все работает отлично, при запуске надо выбрать книгу через проводник. Начали возникать случаи...

Ошибка при повторном открытии книги процедурой
Private Sub CommandButton4_Click() If WorkbookIsOpen("Книга.xls") = True Then Exit Sub 'проверка функцией открыта ли книга если да то...

Создать приложение в VBA, позволяющее создать примечание при открытии книги Excel
нужно 1. Создать приложение в VBA, позволяющее создать примечание при открытии книги Excel. как начать незнаю??? подскажите

Ошибка "Can't find project or library" при открытии документа на других машинах
Здравствуйте уважаемые коллеги. Написал програмку :). Возника следующая проблема: она работает на компьютере на котором я её написал, а на...

Ошибка eolesyserror при открытии файла Excel
Доброго времени суток всем. Возникла проблема в довольно таки банальной операции, как чтение данных из файла. При отладке программа...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru