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