Поиск значения события (вводимое пользовk

Автор Frontber, 31 января 2012, 10:35

0 Пользователи и 1 гость просматривают эту тему.

Frontber

Приветствую всех форумчан.

Прошу помочь в решении проблемы, с коей самостоятельно справиться пока не получается.
Суть: есть журнал с двумя листами. На первом листе, в первом столбце список телефонов. Номер, в процессе работы, вводится вручную диспетчером. Сразу после ввода номера, во втором столбце автоматически фиксируется время ввода (премногая благодарность за код уважаемому RFJ), в третьем столбце, надо бы - но не получается, должен быть прописан результат проверки введенного номера телефона по колонкам "постоянные клиенты" и "черный список", находящимся на втором листе. В код добавлен макрос защиты введенных значений уважаемого JohnSUN (искренняя ему благодарность. - потрясающая пользовательская ценность для документов предназначенных для совместной работы большого количества участников разной степени опытности).
Проблема в поиске вводимого значения по диапазону другого листа (в дальнейшем, это лист планируется полностью защитить и сделать скрытым). Поиск по форуму/самостоятельные эксперименты рабочего решения не принесли. Три способа поиска по листу или диапазону из книги Питоньяка задействовать также не удалось. И причина ускользает от понимания. Прошу помощи (в идеале, если это возможно, с пояснением) у обладающих опытом работы с Calc и располагающих свободным временем. Даже краткие советы будут приняты с искренней признательностью.
OO 3.3.0 (9567), Win7

[вложение удалено Администратором]

Hasim


JohnSUN

#2
Сказал бы "Добро пожаловать на форум!", но, судя по тексту сообщения, пожаловал уже давно  ;D
Поэтому - просто "Привет!"

Давай поковыряем его вместе. Только, если не трудно, прицепи оригинальный Журнал, с макросом. А то этот Журнал-1 без единой строчки кода пришел. В таких ситуациях проще просмотреть, что уже было написано, и поправить в двух-трех местах, чем начинать писать с нуля...

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

PS. Будешь цеплять файл, будь добр, измени порядок букв в заголовке колонки H... А то как-то мешает сосредоточиться.  ;D
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Frontber

#3
 Hasim, JohnSUN, спасибо за отклик.
=Добро пожаловать на форум!", но, судя по тексту сообщения, пожаловал уже давно=
Да, 2 дня. Столько же, сколько имею дело с Calc.
=Пропал макрос, уважаемый.=
Hasim, извиняюсь. Сейчас попробую еще раз. Кстати, попытка сохранить макрос в другом модуле, была разрешена с трудом. Макрос упирался и говорил, что сохраниться не может. На всякий случай я все макросы снял с событий. А запуск слушателя закомментил.
=Давай поковыряем его вместе. = JohnSUN, спасибо.
=Только, если не трудно, прицепи оригинальный Журнал, с макросом. В таких ситуациях проще просмотреть, что уже было написано, и поправить в двух-трех местах, чем начинать писать с нуля...=
да, конечно. Собственно, именно в таком виде файл и прикладывал. Чтоб именно править, а не с нуля писать.
=а нет желания вынести всю логику в отдельное диалоговое окно, в форму ввода? Чтобы пользователь работал не с ячейками таблицы, а с полями ввода...=
Понимаешь, я минимизирую время приема заявки, работа с ячейками напрямую, позволяет обучить диспетчера лишь быстрым клавишам копипаста и процесс идет очень быстро. Любые формы заполнения, даже будучи удобными и наглядными, время обработки заявки увеличивают. Проверено на профсофте. Оказалось, что банальная табличка удобнее и быстрее всего.
Прикладываю журнал еще раз. Еще раз с кодом).

[вложение удалено Администратором]

JohnSUN

Цитата: Frontber от 31 января 2012, 11:44
Цитироватьа нет желания вынести всю логику в отдельное диалоговое окно, в форму ввода? Чтобы пользователь работал не с ячейками таблицы, а с полями ввода...
Понимаешь, я минимизирую время приема заявки, работа с ячейками напрямую, позволяет обучить диспетчера лишь быстрым клавишам копипаста и процесс идет очень быстро. Любые формы заполнения, даже будучи удобными и наглядными, время обработки заявки увеличивают. Проверено на профсофте. Оказалось, что банальная табличка удобнее и быстрее всего.
Здесь готов спорить, долго, до хрипоты... "Профсофт" пишут тоже люди. И, как и везде, люди разные. Есть программисты для людей, а есть программисты для зарплаты. Форму ввода тоже можно сделать обалденно быстрой и невероятно удобной... В то же время в 1Совских конфигурациях есть стандартная форма "Цены и валюта". Создателя этой формы я бы... я бы... я бы ЗАСТАВИЛ ПОРАБОТАТЬ С ЭТОЙ ФОРМОЙ ХОТЯ БЫ НЕДЕЛЮ!
Но сейчас не об этом.
Что должно происходить, если "Источник" в списке "Постоянных клиентов"? А если в "Черном списке"? А если и там, и там? (Не удивляйся последнему вопросу. Эти списки тоже будет заполнять человек, а людям свойственно ошибаться). Достаточно ли просто подсветить ячейку с номером зеленым ил черным цветом? Или будут какие-то дополнительные вычисления?
Что именно вводит диспетчер? Только "Источник"? Или и остальные колонки заполняет? Как именно заполняет? При чем здесь "быстрые клавиши копипаста"? У диспетчера эти данные уже где-то есть и их нужно перекинуть в Calc?
Как именно вводятся данные? Строка за строкой сверху вниз? Или набрасывает колонку номеров и потом ползает вверх-вниз заполняя недостающие значения?
Куда потом нужно будет кинуть Журнал? Только на печать? Или эти данные будут где-то использоваться (накапливаться)?

Что касается первоначального вопроса, "Как искать в данных с другого листа".
Я бы не использовал последний, самый быстрый способ, который предлагает Питоньяк - с поисковым дескриптором. Поиск будет вестись на скрытом защищенном листе. Пока не известно, как очередная версия офиса будет трактовать понятие "скрытый защищенный" - то ли как раньше (если я уже тянусь из Бэйсика к ячейке, то я её получу в любом случае), то ли с повышенной безопасностью (раз уж защищена, то защищена напрочь). Поэтому не стал бы рисковать, а считывал бы данные в массив и в цикле перебирал пока не встречу искомое значение или пока не закончится массив.
Если же ячейки нужно просто подсвечивать (см. мой первый абзац вопросов), то вполне можно обойтись обычным условным форматированием без макроса...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Frontber

=Здесь готов спорить, долго, до хрипоты..= А вот, кстати, тоже бы поспорил, с удовольствием. Заради процесса, с приведением примеров, и, конечно же, обязательным выводом общей концепции). Потом, при случае, обязательно.

=Что должно происходить, если "Источник" в списке "Постоянных клиентов"?
Тогда, (в макросе строка закоментчена, поскольку споткнулся еще на тестовом поиске по тест диапазону), мы делаем
oSheet=oDoc.Sheets.getByName("     Заявки     ")
oCell=oSheet.getCellByposition(c+2,r)
oCell.setString("Скидка") ' только пишем "Скидка" и все.

=если в "Черном списке"? =
oSheet=oDoc.Sheets.getByName("     Заявки     ")
oCell=oSheet.getCellByposition(c+2,r)
oCell.setStrin("Внимание!")
MsgBox "          Этот номер в черном списке! ' пишем в ячейку (c+2,r) предупреждение, а чтобы диспетчер точно не проигнорировал возможную засаду, выведем еще и окошко с уведомлением. 

=А если и там, и там?=
данную возможность исключу при формировании списков "Пост.клиенты", и "Черн.список", поиском/удалением дубликатов.

=Достаточно ли просто подсветить ячейку с номером зеленым ил черным цветом?=
А так и будет. oCell.setString("Скидка") условным форматированием на слово "Скидка", любая ячейка на листе будет выделена зеленым,
oCell.setStrin("Внимание!") - красным, "Отказ" (это вводит диспетчер руками) - черным.

=Или будут какие-то дополнительные вычисления?=
скорее всего лишь подсветка иным цветом дублей в столбце "Источник". Потребность, как и вариант выполнения еще не рассматривал.

=Что именно вводит диспетчер? Только "Источник"? Или и остальные колонки заполняет? Как именно заполняет? При чем здесь "быстрые клавиши копипаста"? У диспетчера эти данные уже где-то есть и их нужно перекинуть в Calc?=
Диспетчер, вручную, вводит данные по всем столбцам строки после разговора с клиентом. Именно вручную, в произвольном порядке и произвольной форме. В екселе я им делал выпадающие списки с набором значений (например, списком Улиц) - дружно хором отказались. Ну ок, форма записи совсем не критична, будет время заняться аналитикой (например, инфа о том, - с каких районов, в какое время, в каком количестве идут заявки, - может быть весьма продуктивно использована), сделаю им выпадающие списки выбора, дабы унифицировать записи для дальнейшей обработки. Но это далеко потом.
Самое важно, ввод значений (это телефонные номера, skype, icq) в первую колонку. Вводится диспетчером вручную копипастом из других программ. Список этих программ, их количество, вид, формат и пр, еще не устоялся, возможны сильные изменения в процессе работы. Потому простой перенос простым копированием номеров телефонов на данном этапе является оптимальным вариантом. Унификация номера (вставка номера в четко заданном виде, например с +7) осуществляется форматом сторонней программы.

=Как именно вводятся данные? Строка за строкой сверху вниз? Или набрасывает колонку номеров и потом ползает вверх-вниз заполняя недостающие значения?=
Да. Именно. Строка за строкой, по ходу работы. Ваш макрос сохранения введенных данных, который я поставил на событие сохранения документа (а сохранение документа в свою очередь в настройках поставлю через каждую минуту. Или через 2. В процессе увидим, как удобнее), замораживает введенные значения. И новый номер диспетчеру придется обязательно вводить именно с новой строки. Что, собственно, и надо.

=Куда потом нужно будет кинуть Журнал? Только на печать? Или эти данные будут где-то использоваться (накапливаться)?=
журнал предназначен чисто для внутреннего пользования. Печати не будет. Данные будут - когда-нибудь потом - использоваться для анализа, который легко провести ручками, редко-разово, с помощью стандартных формул.
Сам журнал будет отправляться на почту. Поскольку Калк (я об этом вчера прочел) использует лишь почтовую программу, установленную по умолчанию (а для меня это неудачный вариант), диспетчер по кнопке в Журнале (макросом) будет запускать Thunderbird Portable и отправлять Журнал на почту заданную в шаблонах Thunderbird.

=Что касается первоначального вопроса, "Как искать в данных с другого листа".
Я бы не использовал последний, самый быстрый способ, который предлагает Питоньяк - с поисковым дескриптором. Поиск будет вестись на скрытом защищенном листе. =
Я понимаю. Первоначальный мой замысел был вообще в запуске макросом по событию формулы VLOOKUP( ) с проверкой диапазонов другого листа. С реализацией замысла получилось не совсем. Вернее, совсем не получилось. Оттуда, собственно, и пошли мои текущие попытки поиска хоть какого-нибудь рабочего варианта сравнения вводимого диспетчером номера с заданными диапазонами.

Извиняюсь за саму потребность наводящих вопросов, но массив текста в первом посте с описанием всех подробностей выглядел бы совсем удручающим).

JohnSUN

Двинемся задом наперёд...
Цитата: Frontber от 31 января 2012, 16:40
Первоначальный мой замысел был вообще в запуске макросом по событию формулы VLOOKUP( ) с проверкой диапазонов другого листа.
В данном случае VLOOKUP( ) не единственній возможный вариант.
Для начала присваиваем имя диапазонам справочных ячеек (меню Вставка-Названия-Определить или просто Ctrl+F3): постоянным клиентам, например, "VIP", а черному списку, скажем, "bad". Так с ними проще будет работать.
Тогда функция COUNTIF(VIP;A2) вернет ноль, если значение из ячейки A2 отсутствует в списке постоянных клиентов, а COUNTIF(bad;A2) вернет "не ноль" (единицу или больше), если номер встречается в черном списке.
По понятиям Calc'а, ноль это Ложь (False), а "не ноль" - Истина (True). И, значит, всю работу выполнит формула
=IF(COUNTIF(VIP;A2);"Скидка";IF(COUNTIF(bad;A2);"Внимание!";""))
Ну, или, если хочется еще и всплывающее окошко с предупреждением, то
=IF(COUNTIF(VIP;A2);"Скидка";IF(COUNTIF(bad;A2);ALLERT(A2);""))
где функция ALLERT() что-то вроде
Function ALLERT(num) As String
MsgBox("Номер " + num +" в черном списке!",48,"Внимание!")
ALLERT = "Внимание!"
End Function

Не самое лучшее решение — если запустить пересчет по Ctrl+Shift+F9, то выскочит предупреждение по каждому черному номеру на листе. Замучается ОК нажимать.
Цитата: Frontber от 31 января 2012, 16:40
журнал предназначен чисто для внутреннего пользования. Печати не будет. Данные будут - когда-нибудь потом - использоваться для анализа, который легко провести ручками, редко-разово, с помощью стандартных формул.
Так стоит ли в таком случае продолжать возится с Calc'ом? Может, посмотреть в сторону Base?
Цитата: Frontber от 31 января 2012, 16:40
Строка за строкой, по ходу работы... замораживает введенные значения. И новый номер диспетчеру придется обязательно вводить именно с новой строки. Что, собственно, и надо.
И еще раз — уж очень это смахивает на работу с базой данных, а не с табличным калькулятором.
Но если Calc ближе и роднее, то я бы вообще защитил лист сверху донизу, а макрос снимал бы защиту, заполнял первую свободную строку данными и восстанавливал защиту. И тут же сохранял бы книгу. Правда, по мере увеличения объёма данных и время сохранения будет расти.
Цитата: Frontber от 31 января 2012, 16:40
Самое важно, ввод значений (это телефонные номера, skype, icq) в первую колонку. Вводится диспетчером вручную копипастом из других программ. Список этих программ, их количество, вид, формат и пр, еще не устоялся, возможны сильные изменения в процессе работы. Потому простой перенос простым копированием номеров телефонов на данном этапе является оптимальным вариантом. Унификация номера (вставка номера в четко заданном виде, например с +7) осуществляется форматом сторонней программы.
Я тут подумал... Если мы будем перехватывать события клавиатуры... Отлавливать, скажем, Shift+Insert и Ctrl+V... И по этим событиям анализировать содержимое буфера обмена... Соответствует текст маске +7 и сколько-то там цифр — пишем в поле "Номер телефона". Состоит из одних цифр без плюса впереди — в поле номер Аськи... Латинские буквы без @ - в скайп-имя, а с "собакой" - в e-mail... Но, разумеется, для каждого из них должна быть своя колонка.
А остальные нажатия кнопок дописывать в какое-то общее поле, которое после окончания ввода парсить и раскидывать по Улица-Дом, Куда и Цена.
Но это так, пока на уровне идеи...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Frontber

ок, также, задом наперед

ЦитироватьЕсли мы будем перехватывать события клавиатуры... Отлавливать, скажем, Shift+Insert и Ctrl+V... И по этим событиям анализировать содержимое буфера обмена... Соответствует текст маске +7 и сколько-то там цифр — пишем в поле "Номер телефона". Состоит из одних цифр без плюса впереди — в поле номер Аськи... Латинские буквы без @ - в скайп-имя, а с "собакой" - в e-mail... Но, разумеется, для каждого из них должна быть своя колонка.
не совсем оптимально, девочки могут (редко, но могут) и в ручную набить в заданном формате. Если ловить по сочетанию клавиш - потеряем событие. Если ошиблась при вводе - потеряем событие. Сугубое лично-скромное мнение, оптимален именно уже внедренный запуск слушателя на изменение ячеек в первом столбце. Это уже делается для фиксации времени ввода значения в первый столбец (Listener слуашает с А2 по, допустим, А1000). Вроде логично тут же и вставить сверку введенного значения с нужным диапазоном. 
Цитироватья бы вообще защитил лист сверху донизу, а макрос снимал бы защиту, заполнял первую свободную строку данными и восстанавливал защиту. И тут же сохранял бы книгу.
а так и сделано. Уже. взят Ваш замечательный макрос и прикручен к событию автосохранения документа (чей интервал я свободно выставляю в настройках).
ЦитироватьТак стоит ли в таком случае продолжать возится с Calc'ом? Может, посмотреть в сторону Base? ... И еще раз — уж очень это смахивает на работу с базой данных, а не с табличным калькулятором.
Здесь энтузиазм несколько меркнет. Если с Калк есть хотя бы два дня знакомства, чтение форума, Питоньяка (по вашей, кстати, наводке) и прочие страшные макрос-эксперименты, выходящие за грань сознания, то Base с вершин нынешнего опыта выглядит (может только выглядит?) темной материей, способной, для получения малейшего практического эффекта, поглотить мосск на долгие недели. Подобная роскошь, к сожалению, пока недоступна. хотя, как для любой исследовательской натуры заманчиво, да. очень.)
ЦитироватьНе самое лучшее решение — если запустить пересчет по Ctrl+Shift+F9, то выскочит предупреждение по каждому черному номеру на листе. Замучается ОК нажимать.
да, страшные вещи. надо бы как-то подобного избегнуть.
ЦитироватьПо понятиям Calc'а, ноль это Ложь (False), а "не ноль" - Истина (True).
) да, теперь уже знаю.
Цитировать=IF(COUNTIF(VIP;A2);"Скидка";IF(COUNTIF(bad;A2);ALLERT(A2);""))
ок, получается лок.проблема в том, как повесить эту формулу на событие? Допустим, у меня событие v=oEvent.Source.String (из макроса RFJ, лучи добра ему и признательности), как это свести с формулой?
А кроме того
ЦитироватьНе самое лучшее решение
как тогда быть, где будет правильное направление?
Может сделать проверочный диапазон не не ДРУГОМ листе, а на этом же. Просто колонки скрыть и все (вчера прочел, что у Калк такое возможно)?

Frontber

вот, у того же, уважаемого Питоньяка,
Sub SearchARange
  REM Author: Andrew Pitonyak
  Dim oSheet
  Dim oRange
  Dim oFoundCell
  oSheet = ThisComponent.getSheets().getByIndex(0)
  oRange = oSheet.getCellRangeByName("F7:H11")
  oFoundCell = SimpleSheetSearch("41", oRange, False)
End Sub

гуру поясняет, что встроенные механизмы самое оно. Ок.
У меня же, даже тест-поиск

Sub OOO_chartDataChanged(oEvent)   
     c=oEvent.Source.CellAddress.Column
     r=oEvent.Source.CellAddress.Row
     v=oEvent.Source.String
          Now_write(r,c,v)
End Sub
'-----------------------
Sub Now_write(r,c,v)
Dim SimpleSheetSearch
     oDoc=ThisComponent   
          oSheet=oDoc.Sheets.getByName("     Заявки     ")   
          oCell=oSheet.getCellByposition(c+1,r)
          oCell.setValue(Now)
             
     oSheet = oDoc.Sheets.getByName("     Заявки     ")           
     oRange = oSheet.getCellRangeByName("F2:F10")
     oFoundCellTest = SimpleSheetSearch("111", oRange, False)

     If oFoundCellTest = True Then
          oSheet=oDoc.Sheets.getByName("     Заявки     ")
          oCell=oSheet.getCellByposition(c+2,r)
          oCell.setString("Скидка")
         
     Else
          oSheet=oDoc.Sheets.getByName("     Заявки     ")
          oCell=oSheet.getCellByposition(c+2,r)
          oCell.setString("Новый клиент")
     End If
End Sub

возвращается неправильно. Что именно тому причиной, на нынешнем уровне дружбы с Calc ПОКА не понимаю. иэхх..

JohnSUN

Цитата: Frontber от 31 января 2012, 20:47
девочки могут (редко, но могут) и в ручную набить в заданном формате.
Согласен. Они могут. Они всё могут... И NumLock отключить и объявлять программу (не клавиатуру!) нерабочей...
Цитата: Frontber от 31 января 2012, 20:47Вроде логично тут же и вставить сверку введенного значения с нужным диапазоном. 
А если "сверку" вставить заранее? В весь диапазон от C2 до, скажем, С1000? Для пустых ячеек в колонке A формула выдает такое же пустое значение в колонке C...
Цитата: Frontber от 31 января 2012, 20:47
ЦитироватьМожет, посмотреть в сторону Base?
Здесь энтузиазм несколько меркнет... Base... выглядит темной материей, способной, для получения малейшего практического эффекта, поглотить мосск на долгие недели. Подобная роскошь, к сожалению, пока недоступна.
Ну, нет так нет... "Будет день - будет и пища". Значит, думаем в терминах Calc'а...
Цитата: Frontber от 31 января 2012, 20:47
ЦитироватьЗамучается ОК нажимать.
да, страшные вещи. надо бы как-то подобного избегнуть.
Самый простой способ - отказаться от всплывающего окошка
Цитата: Frontber от 31 января 2012, 20:47
Может сделать проверочный диапазон не не ДРУГОМ листе, а на этом же. Просто колонки скрыть и все (вчера прочел, что у Калк такое возможно)?
Да нет, расположение справочника не имеет значения... А вот по поводу его структуры есть мысль: как насчет того, чтобы объединить оба справочника в один из двух колонок - в первой колонке тот же код (телефон, UIN или скайп-имя), а во второй - отметка "Скидка" или "Внимание!". Тогда, действительно, VLOOKUP() пригодится...

У Питоньяка там рядом текст функции SimpleSheetSearch должен быть... А в твоем варианте SimpleSheetSearch - это просто переменная, описанная через Dim. Нужно скопировать к себе еще и текст этой функции...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Frontber

ЦитироватьИ NumLock отключить и объявлять программу (не клавиатуру!) нерабочей...
они делают еще смешней.  :roll:
ЦитироватьА если "сверку" вставить заранее? В весь диапазон от C2 до, скажем, С1000? Для пустых ячеек в колонке A формула выдает такое же пустое значение в колонке C...
был такой вариант. Решается просто, без макросов. Отказался ввиду периодического уничтожения формул и, главное, видя длинный вертикальный ползунок, они мотают до конца и там пишут. Зачем так, не понимаю. Делают.
ЦитироватьСамый простой способ - отказаться от всплывающего окошка
ну, я и оставил его ТОЛЬКО для черного списка. Ибо возможный ущерб превышает неудобство лишнего клика.
Цитироватькак насчет того, чтобы объединить оба справочника в один из двух колонок - в первой колонке тот же код (телефон, UIN или скайп-имя), а во второй - отметка "Скидка" или "Внимание!".
вот здесь можно подробнее? Во второй колонке у нас время ввода. Колонки "Пост.клиент" и "Черный список" (их вы называете справочниками?) можно сделать на этом листе далее, в идеале, скрыть от любопытных ручек.
У
ЦитироватьПитоньяка там рядом текст функции SimpleSheetSearch должен быть... А в твоем варианте SimpleSheetSearch - это просто переменная, описанная через Dim. Нужно скопировать к себе еще и текст этой функции...
вот вроде забрезжило разъяснением, текст функции, как это сделать? Питоньяк в этом месте лаконичен. Или, скорее всего, я не внимателен.

JohnSUN

Цитата: Frontber от 31 января 2012, 21:48
текст функции, как это сделать? Питоньяк в этом месте лаконичен. Или, скорее всего, я не внимателен.
REM Find the first cell that contains sString$
REM If bWholeWord is True, then the cell must contain ONLY the text
REM as indicated. If bWholeWord is False, then the cell must only contain
REM the requested string.
Function SimpleSheetSearch(sString$, oSheet, bWholeWord As Boolean) As Variant
  Dim oDescriptor
  Dim oFound
  REM Create a descriptor from a searchable document.
  oDescriptor = oSheet.createSearchDescriptor()
  REM Set the text for which to search and other
  REM http://api.openoffice.org/docs/common/ref/com/sun/star/util/SearchDescriptor.html
  With oDescriptor
    .SearchString = sString$
    REM These all default to false
    REM SearchWords forces the entire cell to contain only the search string
    .SearchWords = bWholeWord
    .SearchCaseSensitive = False
  End With
  REM Find the first one
  oFound = oSheet.findFirst(oDescriptor)
  SimpleSheetSearch = oFound
 
  REM Do you really want to find more instances
  REM You can continue the search using a cell if you want!
  'Do While Not IsNull(oFound)
  '  Print oFound.getString()
  '  oFound = oSheet.findNext( oFound, oDescriptor)
  'Loop
End Function
Работоспособность не проверял - просто копипастил из  "6.23.  Searching a Calc document". Могли вкрасться ачепятки!
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Frontber

#12
этот код я пробовал
и даже с переводом заремленых строк от, если не ошибаюсь, Заимских А.Н.
особо интересует строка REM Set the text for which to search and other
используя гуглопереводчик понимаю, надо бы указать то, что ищем. Как это сделать, к сожалению, не совсем понятно.
Указать для sString$ ?
может быть, действительно, код рабочий... Во-вторых, вы сказали, что использование дескриптора не будет оптимальным вариантом. В недоумении. Как быть? Куда направить изыскания?

_______сегодня_____

я написал длинную хорошую)) формулу, на основе VLOOKUP.
Формула берет значение события, и прогоняет его на сверку по заданным диапазонам. И, в зависимости от результата, записывает в ячейку нужное слово ("Скидка" или "Черный список"). Формула отлично работает на листе. В макросе - нет.


Frontber

Посидев-посмотрев, нашел заковыку:

'после запуска Listener

Sub OOO_chartDataChanged(oEvent)   

     a=oEvent.Source.CellAddress.Column
     b=oEvent.Source.CellAddress.Row
     c=oEvent.Source.String
         
End Sub

не дает мне значение события.
Простая проверка         oCell.setFormula("=TYPE(с)")            дает значение 16, т.е. "ошибка"
Кто может подсказать, в чем дело, как из события взять значение?

Hasim

Цитата: Frontber от  1 февраля 2012, 08:25Простая проверка         oCell.setFormula("=TYPE(с)")            дает значение 16, т.е. "ошибка"
Напиши правильно oCell.setFormula("=TYPE(С1)") и получишь что нужно.