Excel Метод Find() в 1C

Новая тема
Показывать по 10 20 40 сообщений
"Необходимо найти в excel файле некоторые данные.

Делаю так.



1. ОкноExcel = СоздатьОбъект("Excel.Application");

2. РабКнига = ОкноExcel.Application.Workbooks.Open(Файл);  

3. Лист = РабКнига.WorkSheets("Sheet1");

4. tmp = Лист.Range("a10:a40").Find ("то что ищу"));



В результате получаю ошибку: Плохой тип переменной в строке 4.

Если строку переписать вот так -  Лист.Range("a10:a40").Find ("то что ищу")) , то никаких ошибок не выдается.



И тут возникает непроходимый тупняк, который рождает вопрос.

Вопрос: А как получить данные, которые метод Find() возвращает ?"
"может дело в том что:

Find()



Возвращает:

1 - если действие выполнено (запись найдена);

0 - если действие не выполнено.

"
Судя по хелпу из excel, этот метод возвращает Returns Nothing if no match is found. Но от этого не легче.

Вопрос звучит не что он возвращает, а как это возвращаемое значение получить.
"А вот так у меня сработало нормально:

tmp = Лист.Range(Лист.Cells(1,10),Лист.Cells(1,40)).Find ("то что ищу");

Сообщить(tmp.Value);

"
"Вот здесь как раз проблема в том, что он возвращает... :)

Если текст найден и, тогда возвращается ссылка на объект, а если не найдено, то возвращается Nothing и тут-то 1C и выдаёт ошибку; видать не может обработать такое. Первое, что приходит на ум для решение этой проблемы примерно такое:



для count = 1 по 15 цикл

   tmp = Лист.range("A" + строка(count)).Value;

   Если tmp = "что ищу" тогда

// Нашли, что ищем

   КонецЕсли;

КонецЕсли;

"
Не хотелось по началу так делать, хотел сделать через метод Find(). Но видать не судьба. Пришлось сделать обычным перебором. Но рабоатет все очень и очень долго.
Не могли бы вы привести полный код, который у вас заработал ?

Потому как у меня так ничего и не получилось.
Вообще-то в VBA метод .Find() нашел ячейку и сделал ее активной, получить ее значение

=ActiveCell.Value или значение во втором столбце текущей строки, например

=ActiveCell.Offset(0, 2).Value

Тогда уж не

=ActiveCell.Value

а

=Application.ActiveCell.Value
"Извини за неполный ответ (с похмелья был).

Так вот, сообщение об ошибке выдается только если метод Find ничего не нашел (видимо не может 1С правильно понимать значение Nothing). А если нашел - никаких сообщений об ошибке, все работает. Нужно просто заключить вызов этого метода в Попытка...Исключение. Вот полный текст процедуры:



//*******************************************

Процедура Сформировать()

ОкноExcel = СоздатьОбъект("Excel.Application");

РабКнига = ОкноExcel.Application.Workbooks.Open("c:\Книга1.xls");

Лист = РабКнига.WorkSheets(1);

Попытка

tmp = Лист.Range(Лист.Cells(1,10),Лист.Cells(1,40)).Find ("аааа");

Сообщить(tmp.Value);

Исключение

Сообщить("Не найдено");

КонецПопытки;

КонецПроцедуры

"
Читают тему
(гостей: 1)

Быстрый переход