Excel Метод Find() в 1C
Показывать по
сообщений
- 1
- 2
24.12.2004
17:04
#1
"Необходимо найти в excel файле некоторые данные.<br><br>Делаю так.<br><br><br><br>1. ОкноExcel = СоздатьОбъект("Excel.Application");<br><br>2. РабКнига = ОкноExcel.Application.Workbooks.Open(Файл); <br><br>3. Лист = РабКнига.WorkSheets("Sheet1");<br><br>4. tmp = Лист.Range("a10:a40").Find ("то что ищу"));<br><br><br><br>В результате получаю ошибку: Плохой тип переменной</b> в строке 4.<br><br>Если строку переписать вот так - Лист.Range("a10:a40").Find ("то что ищу")) , то никаких ошибок не выдается.<br><br><br><br>И тут возникает непроходимый тупняк, который рождает вопрос.<br><br>Вопрос: А как получить данные, которые метод Find() возвращает ?"
24.12.2004
17:56
#2
"может дело в том что:<br><br>Find(<?>)<br><br><br><br>Возвращает:<br><br>1 - если действие выполнено (запись найдена);<br><br>0 - если действие не выполнено.<br><br>"
24.12.2004
18:19
#3
Судя по хелпу из excel, этот метод возвращает Returns Nothing if no match is found. </b> Но от этого не легче.<br><br>Вопрос звучит не что он возвращает, а как это возвращаемое значение получить.
27.12.2004
03:35
#4
"А вот так у меня сработало нормально:<br><br>tmp = Лист.Range(Лист.Cells(1,10),Лист.Cells(1,40)).Find ("то что ищу"); <br><br>Сообщить(tmp.Value);<br><br>"
27.12.2004
07:46
#5
"Вот здесь как раз проблема в том, что он возвращает...
<br><br>Если текст найден и, тогда возвращается ссылка на объект, а если не найдено, то возвращается Nothing и тут-то 1C и выдаёт ошибку; видать не может обработать такое. Первое, что приходит на ум для решение этой проблемы примерно такое:<br><br><br><br>для count = 1 по 15 цикл<br><br> tmp = Лист.range("A" + строка(count)).Value;<br><br> Если tmp = "что ищу" тогда<br><br> // Нашли, что ищем<br><br> КонецЕсли;<br><br>КонецЕсли;<br><br>"

27.12.2004
15:47
#6
Не хотелось по началу так делать, хотел сделать через метод Find(). Но видать не судьба. Пришлось сделать обычным перебором. Но рабоатет все очень и очень долго.
27.12.2004
15:48
#7
Не могли бы вы привести полный код, который у вас заработал ?<br><br>Потому как у меня так ничего и не получилось.
27.12.2004
17:59
#8
Вообще-то в VBA метод .Find() нашел ячейку и сделал ее активной, получить ее значение<br><br>=ActiveCell.Value или значение во втором столбце текущей строки, например<br><br>=ActiveCell.Offset(0, 2).Value<br><br>
27.12.2004
20:46
#9
Тогда уж не <br><br>=ActiveCell.Value <br><br>а<br><br>=Application.ActiveCell.Value
28.12.2004
03:37
#10
"Извини за неполный ответ (с похмелья был).<br><br>Так вот, сообщение об ошибке выдается только если метод Find ничего не нашел (видимо не может 1С правильно понимать значение Nothing). А если нашел - никаких сообщений об ошибке, все работает. Нужно просто заключить вызов этого метода в Попытка...Исключение. Вот полный текст процедуры:<br><br><br><br>//*******************************************<br><br>Процедура Сформировать()<br><br>ОкноExcel = СоздатьОбъект("Excel.Application"); <br><br>РабКнига = ОкноExcel.Application.Workbooks.Open("c:\Книга1.xls"); <br><br>Лист = РабКнига.WorkSheets(1); <br><br>Попытка<br><br>tmp = Лист.Range(Лист.Cells(1,10),Лист.Cells(1,40)).Find ("аааа"); <br><br>Сообщить(tmp.Value);<br><br>Исключение<br><br>Сообщить("Не найдено");<br><br>КонецПопытки;<br><br>КонецПроцедуры<br><br>"
- 1
- 2
Читают тему
(гостей: 1)