Новости для бухгалтера, бухучет, налогообложение, отчетность, ФСБУ, прослеживаемость и маркировка, 1С:Бухгалтерия

Вход или Регистрация

Показывать по 10 20 40 сообщений
Новая тема Ответить
Письмо в техподдержку 1С
[Прочее]

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

Старый Юзверь
читатель
офлайн
Дата регистрации: 24.12.2004
Сообщений: 23
Пост №1
 
24.12.2004 17:04

"Необходимо найти в 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() возвращает ?"

Квазимодо
читатель
офлайн
Дата регистрации: 12.05.2004
Сообщений: 559
Пост №2
 
24.12.2004 17:56

"может дело в том что:<br><br>Find(<?>)<br><br><br><br>Возвращает:<br><br>1 - если действие выполнено (запись найдена);<br><br>0 - если действие не выполнено.<br><br>"

Старый Юзверь
читатель
офлайн
Дата регистрации: 24.12.2004
Сообщений: 23
Пост №3
 
24.12.2004 18:19

Судя по хелпу из excel, этот метод возвращает Returns Nothing if no match is found. </b> Но от этого не легче.<br><br>Вопрос звучит не что он возвращает, а как это возвращаемое значение получить.

Цуленков Павел (Перспектива, Чита)
читатель
офлайн
Пост №4
 
27.12.2004 03:35

"А вот так у меня сработало нормально:<br><br>tmp = Лист.Range(Лист.Cells(1,10),Лист.Cells(1,40)).Find ("то что ищу"); <br><br>Сообщить(tmp.Value);<br><br>"

Daedal
читатель
офлайн
Дата регистрации: 20.09.2004
Сообщений: 632
Пост №5
 
27.12.2004 07:46

"Вот здесь как раз проблема в том, что он возвращает... :)<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>"

Старый Юзверь
читатель
офлайн
Дата регистрации: 24.12.2004
Сообщений: 23
Пост №6
 
27.12.2004 15:47

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

Старый Юзверь
читатель
офлайн
Дата регистрации: 24.12.2004
Сообщений: 23
Пост №7
 
27.12.2004 15:48

Не могли бы вы привести полный код, который у вас заработал ?<br><br>Потому как у меня так ничего и не получилось.

node
читатель
офлайн
Дата регистрации: 27.12.2004
Сообщений: 1
Пост №8
 
27.12.2004 17:59

Вообще-то в VBA метод .Find() нашел ячейку и сделал ее активной, получить ее значение<br><br>=ActiveCell.Value или значение во втором столбце текущей строки, например<br><br>=ActiveCell.Offset(0, 2).Value<br><br>

Старый Юзверь
читатель
офлайн
Дата регистрации: 24.12.2004
Сообщений: 23
Пост №9
 
27.12.2004 20:46

Тогда уж не <br><br>=ActiveCell.Value <br><br>а<br><br>=Application.ActiveCell.Value

Цуленков Павел (Перспектива, Чита)
читатель
офлайн
Пост №10
 
28.12.2004 03:37

"Извини за неполный ответ (с похмелья был).<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>"

Показывать по 10 20 40 сообщений

Читают тему:

Быстрый переход
Для технических специалистов
  • Книга жалоб и предложений по работе сайта
  • Для технических специалистов
  • Представление регламентированной отчетности
  • Говорильня
  • Бухгалтерский учет: обсуждаем проекты нормативных актов и рекомендаций по ведению учета от БМЦ
  • Новый порядок применения ККТ (онлайн кассы с передачей сведений в ФНС)
  • Интернет-конференция: Оформление командировок по новым правилам
  • МАРКИРОВКА
  • ЕГАИС
  • Учет, налогообложение, автоматизация