К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

1С и Excel функция find()

Гость
0 - 27.08.2012 - 09:40
Не могу понять почему функция отрабатывает только один раз, т.е. первый раз находит, что надо а второй нет....

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий()Цикл
НСтр = Sheet.Columns(4).Find(Формат(Выборка.Период,"ЧЦ=2; ЧВН=; ДФ=dd.MM.yyyy"));
НОбл = Sheet.Range(Sheet.Cells.Item(НСтр.row,4), Sheet.Cells.Item(НСтр.row,28));
НОбл.Cells(1,3).Value = Выборка.СуммаПродаж;
НОбл.Cells(1,4).Value = Выборка.СуммаДЗ;
НОбл.Cells(1,5).Value = Выборка.СуммаОплат;
КонецЦикла;

Первый проход цикла: находит значение даты на листе, второй проход: другая дата не находится, хотя она там точно есть.

То ли после первого поиска область выделяется и второй раз ищется уже в ней (тогда как снять выделение), то ли ещё что-то...

Хелп!
Заранее благодарен.



Гость
1 - 27.08.2012 - 21:29
ф1 еще не предлагали ?
Гость
2 - 28.08.2012 - 01:53
Во второй проход находит то же самое? Гы-гы! А чего ждал?
Гость
3 - 28.08.2012 - 02:04
(1) Себе предложи, остряк


Автор, вот смотри:
"You can use the FindNext and FindPrevious methods to repeat the search." Понял мульку?

Вот тебе пример с msdn:

Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Гость
4 - 28.08.2012 - 02:16
Не очень понимаю, как у одноэснега родился такой вопрос.
В 1с есть, конечно, Найти(бла-бла) в разных контекстах, но никаких FindNext и в помине!
Гость
5 - 28.08.2012 - 02:29
(4) Ничего, что COM соединение используется? Или ты просто меня троллишь? :p
Гость
6 - 28.08.2012 - 02:35
5-GreenDragon > А при чем тут COM? Вообще-то, п.4 относился автору, а не тебе.
Гость
7 - 28.08.2012 - 02:40
(6) При том, что автор ищет результат выборки из 1С в листе экселя, подключённого через COM.
Не понимаю, каким образом упомянутая мной FindNext относится к автору, которй про неё вообще ничего не упоминал.
Гость
8 - 28.08.2012 - 02:42
Сейчас вот как раз буду доставать из загашников обработку по формированию договора в 1С через подключаемый через COM-соединение шаблон ёкселя. Прям судьба мне говорит - сделай эту работу сегодня, а не через несколько дней! Автор, спасибо за напоминание!
Гость
9 - 28.08.2012 - 03:20
Хотя... вот сейчас покумекал... Автор, а у тебя вторая дата, которая не находится после первого поиска, случаем в листе не выше расположена? Кстати, первый вариант мой не прокатит.

After Optional Variant The cell after which you want the search to begin. This corresponds to the position of the active cell when a search is done from the user interface. Note that After must be a single cell in the range. Remember that the search begins after this cell; the specified cell isn’t searched until the method wraps back around to this cell. If you don’t specify this argument, the search starts after the cell in the upper-left corner of the range.

Это второй параметр в Find.
Гость
10 - 28.08.2012 - 03:20
Я ща сделаю сипуку! Вы че тут, сговорились?

У автора не находится, что нужно, потому, что юзает по одному месту. Хватает первого попавшегося. Нужно перейти дальше. И будет счастье!

Но, при чем тут интерфейс COM, если у автора конкретная непонятка по конкретному языку VBA for Applications?

7-GreenDragon > Ты чо? Не вполне трезв? Ты же дал правильный ответ в п. 3. Ну и дела...
Гость
11 - 28.08.2012 - 03:53
(10) Ну, есть слегка ))) Отмечали сегодня заключение контракта... И ответ в (3) неверен. Ибо если вторая искомая дата находится выше или левее первого найденного значения, то найдёт он шиш. Ибо : НОбл = Sheet.Range(Sheet.Cells.Item(НСтр.row,4), Sheet.Cells.Item(НСтр.row,28)); Зачем он это делает - непонятно. Видишь, там НСтр.row? Вот оно весь праздник и портит. Если начинать искать с начала в диапазоне, то всё получится. Если это мешает сделать религия, то заюзать в исключении "FindPrevious Method"
Гость
12 - 28.08.2012 - 17:40
Автор, замени строку на:
НСтр = Sheet.Columns(4).Find(Формат(Выборка.Период,"ЧЦ=2; ЧВН=; ДФ=dd.MM.yyyy"), "A1")
Гость
13 - 28.08.2012 - 20:53
Че? весь код автору пропишешь? Хватит, что принцип на пальцах объяснил:)
Гость
14 - 29.08.2012 - 00:03
:))
Гость
15 - 29.08.2012 - 18:31
зачем мучать мсдн, может просче нажать ф1 ?


К списку вопросов






Copyright ©, Все права защищены