2 Excel'я одновременно

1. Mirac 14.09.08 16:16 Сейчас в теме
День добрый.

Пытаюсь сделать обработку, которая бы сравнивала по нескольким параметрам 2 документа Excel
в начале считываю 2 документа таким образом:
Код
Попытка
       Excel1 = СоздатьОбъект("Excel.Application");
   Исключение
      Сообщить("Похоже, Excel на компьютере не установлен. Необходимо выполнить установку/переустановку Excel.","!");
      Возврат;      
   КонецПопытки;
   Excel1.Workbooks.Open(Сокрлп(ИмяФайла));
   Книга1 = Excel1.ActiveWorkbook;
   Строк1 = Excel1.Cells.CurrentRegion.Rows.Count; 
   Попытка
       Excel2 = СоздатьОбъект("Excel.Application");
   Исключение
      Сообщить("Похоже, Excel на компьютере не установлен. Необходимо выполнить установку/переустановку Excel.","!");
      Возврат;      
   КонецПопытки;
   Excel2.Workbooks.Open(Сокрлп(ИмяФайла11));
   Книга2 = Excel2.ActiveWorkbook;
   Строк2 = Excel2.Cells.CurrentRegion.Rows.Count;
Показать полностью

но в результате обработка смотрит только в один файл.. во второй..
хоть анализ описан и для разных

анализ:

первый док
Код
СтлбНаим1    = 1;
СтлбКод1   = 2;
      
Наим1   = СокрЛП(Excel1.Cells(ТекСтрока1, СтлбНаим1).Value);
Код1           = СокрЛП(Excel1.Cells(ТекСтрока1, СтлбКод1).Value);
Показать полностью


второй док
Код
СтлбНаим2    = 1;
СтлбКод2   = 2;
            
Наим2   = СокрЛП(Excel2.Cells(ТекСтрока2, СтлбНаим2).Value);
Код2           = СокрЛП(Excel2.Cells(ТекСтрока2, СтлбКод2).Value);
Показать полностью


в результате после анализ переменные Наим1 и Наим2 выводят одинаковые значения, хотя в файлах они разные.


если же часть кода:
Код
Еxcel2.Workbooks.Open(Сокрлп(ИмяФайла11));
Книга2 = Excel2.ActiveWorkbook;
Строк2 = Excel2.Cells.CurrentRegion.Rows.Count;
Показать полностью

поставить непосредственно перед обработкой вротого документа, то все работает нормально.
но, к сожелению так сделать нельзя, так как анализ идет паралельно обоих документов (поиск данных из одного дока во втором доке)

подскажите как быть...
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. kitt 323 15.09.08 03:27 Сейчас в теме
Так у тебя обоим переменным присвоенно значение ActiveWorkbook. Ты понимаешь объектную модель Экселя? Ты создаешь Аппликейшн. Открываешь книгу. Присваиваешь переменной ссылку на свойство ActiveWorkbook, которое содержик ссылку на текущую рабочую книку. Потом создаешь другой объект Аппликэйшн, а он глобальный, и может существовать только в одном экземпляре, в результате тебе просто возвращают ссылку на уже существующий, тобой же ранее созданный аппликейшн. Потом ты открываешь там вторую книгу. Эта книга становиться активной, тоесть свойство ActiveWorkbook теперь указывает на другую книгу. И первая переменная тоже указывает на другую книгу - на вторую. Ну и дальше естественно, две переменные содержат ссылку на один и тот же объект, и у тебя получается ... ну то что у тебя получается.

Вместо такой некрасивой ссылки используй код который возвращает ссылки на конкретные объекты, а не на свойства которые меняются в зависимости от условий.

Код
// это код уже возвращает ссылку на открываему книгу
Excel1.Workbooks.Open(Сокрлп(ИмяФайла));
// надо только ее поймать
Книга1 = Excel1.Workbooks.Open(Сокрлп(ИмяФайла));
Книга2 = Excel1.Workbooks.Open(Сокрлп(ИмяФайла1));
Показать полностью


И перей сном почитай какую нибудь книжечку по VBA ;)



Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот