Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

7 Декабрь 2021, 17:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Поле для заполнения с выпадающим списком  (Прочитано 1490 раз)
0 Пользователей и 1 Гость смотрят эту тему.
AND1979
Участник
**
Offline Offline

Сообщений: 9


« Стартовое сообщение: 8 Ноябрь 2021, 12:10 »

Помогите. Как написать макрос вставляющий поле для заполнения  с выпадающим списком - аналог ComboBox в vbа и заполнить его построчно!
Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 568


« Ответ #1: 8 Ноябрь 2021, 13:38 »

Если связать ComboBox с полем таблицы, то он сам заполнится значениями. Если нужны уники, то в свойствах ComboBox можно указать SQL-запрос вида:

SELECT DISTINCT Поле FROM Таблица
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
AND1979
Участник
**
Offline Offline

Сообщений: 9


« Ответ #2: 8 Ноябрь 2021, 14:32 »

Нет, мне не нужна таблица, мне надо чтобы макрос вызывал ComboBox, и я мог выбрать из списка значений нужное + дополнить,  а далее, поиск по   документу .odt  с заменой маркерных слов на текст из выбранного поля  ComboBox. При этом список ComboBox должен быть заполнен заранее известными фразами (пусть будет к примеру 1, 2, 3).

При помощи InputBox все работает
Dim sText As String
sText =InputBox ("Личный номер", "Поле1")
'найти и заменить
Dim oDescriptor
Dim oFound
Dim oFoundAll
Dim n%
oDescriptor = ThisComponent.createSearchDescriptor()
oDescriptor.SearchString = "Q1"
oFoundAll = ThisComponent.findAll(oDescriptor)
For n% = 0 to oFoundAll.getCount()-1
oFound = oFoundAll.getByIndex(n%)
oFound.setString(sText)
Next

Но надо с СomboBox что бы был список вариантов и возможность их корректировать

Не получается
Записан
sokol92
Форумчанин
***
Online Online

Пол: Мужской
Сообщений: 625


WWW
« Ответ #3: 8 Ноябрь 2021, 17:56 »

А где Вы предполагаете хранить список значений (ведь Вы этот список будете дополнять)?
Вы хотите Combobox вызывать из диалога или разместить его на документе?
Записан

Владимир.
AND1979
Участник
**
Offline Offline

Сообщений: 9


« Ответ #4: 8 Ноябрь 2021, 18:15 »

1) хранить прямо в тексте макроса - если понадобится дополнить заберусь туда.
2) вызвать из диалога.
Записан
AND1979
Участник
**
Offline Offline

Сообщений: 9


« Ответ #5: 8 Ноябрь 2021, 18:23 »

можно хранить и в файле txt но мне кажется это сложнее
Записан
sokol92
Форумчанин
***
Online Online

Пол: Мужской
Сообщений: 625


WWW
« Ответ #6: 8 Ноябрь 2021, 18:42 »

В Книге А.Питоньяка OOME_4_0.odt глава 18 посвящена диалогам. В этой книге есть также библиотека макросов (OOME_40, модуль Dialogs) и пример диалога с различными элементами управления, включая Combobox (OOMESample).
Записан

Владимир.
AND1979
Участник
**
Offline Offline

Сообщений: 9


« Ответ #7: 8 Ноябрь 2021, 19:37 »

 Function GetSelectedItem( oComboBoxModel As Object ) As String
      GetSelectedItem = oComboBoxModel.Text
  End Function
Sub Main
  Dim nCount As Integer
  Dim sItems As Variant
  oComboBox = oDialog.getControl("ComboBox1")
  nCount = oComboBox.getItemCount()
  oComboBox.removeItems( 0, nCount )
  sItems = Array( "Item1", "Item2", "Item3", "Item4", "Item5" )
  oComboBox.addItems( sItems, 0 )
End Sub
Ругается что объектная переменная не установлена
Записан
sokol92
Форумчанин
***
Online Online

Пол: Мужской
Сообщений: 625


WWW
« Ответ #8: 8 Ноябрь 2021, 19:45 »

Не спешите, книга Питоньяка предназначена для длительного непрерывного изучения.
Что такое у Вас oDialog?

Возьмите работающий макрос Питоньяка OOME_40.Dialogs.RunOOMEDlg и тренируйтесь на кошках нем.  Улыбка
Записан

Владимир.
economist
Форумчанин
***
Offline Offline

Сообщений: 1 568


« Ответ #9: 8 Ноябрь 2021, 19:53 »

AND1979 - во Writer/ODT можно использовать готовое расширение с регулярками и загрузкой/сохранением замен https://extensions.libreoffice.org/en/extensions/show/alternative-dialog-find-replace-for-writer
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
AND1979
Участник
**
Offline Offline

Сообщений: 9


« Ответ #10: 8 Ноябрь 2021, 20:15 »


Наверно никто не знает как решить вопрос.
Жаль.
Записан
sokol92
Форумчанин
***
Online Online

Пол: Мужской
Сообщений: 625


WWW
« Ответ #11: 8 Ноябрь 2021, 20:56 »

А что не получается? Добавьте в RunOOMEDlg (перед вызовом метода Execute):
 
Код:
oOOMEDlg.Model.getByName("ColorBox").StringItemList=Array( "Item1", "Item2", "Item3", "Item4", "Item5" )
и выбирайте цвет из Item1, ...
Записан

Владимир.
economist
Форумчанин
***
Offline Offline

Сообщений: 1 568


« Ответ #12: 9 Ноябрь 2021, 10:15 »

AND1979 - задача все равно не очень понятна, но вот как она решается в экосистеме OpenOffice|LibreOffice уже 16 лет:

1) Создаете таблицу в Calc с полями Личный номер, ФИО, итд. Заполняете ее (можно одновременно всем отделом, есть общий доступ по сети)

2) Создаете базу данных *.odb - файл, подключение к имеющейся, тип Таблица. ODB - это прослойка между Calc и Writer для передачи значений полей БД (ячеек Calc) - в поля документа Writer (*.odt)

3) Во Writer/Calc в своем "выходном" документе - формуляре, приказе, докладной итп - жмете Ctrl+Shift+F4  и мышью перетаскиваете поля за "заголовок" - Личный номер - в то место где он должен стоять <Личный номер>

Теперь, чтобы отразить в документе данные Иванов И.И. 5469841213 - достаточно выделиить его в верхней таблице и нажать кнопку Данные в поля.

Но это еще не всё. Если вам нужно сформировать 100, 1000, 10000 документов по всему списку - вы жмете кнопку Рассылка, Циркулярное письмо - и у вас получается один большой или N отдельных файлов, с уже заполненными данными.

А как быть, если вам нужны не все ФИО из Calc, а только те что еще работают в отделе Бухгатерия? Вот тут-то и становится понятно, почему нужна база данных, ведь в ней есть "язык для экономистов" - SQL. Открываем odb-файл и пишем в нем запрос:

SELECT * FROM Таблица WHERE Отдел="Бухгалтерия" AND ДатаУвольнения IS NULL    

И теперь рассылка будет идти только по тем строкам, что вам нужно.
« Последнее редактирование: 9 Ноябрь 2021, 10:21 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
eeigor
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 752



« Ответ #13: 9 Ноябрь 2021, 17:56 »

@ecomonist, вот я читаю, и мне всё понятно. Но не уверен, что @AND1979 не "загрустил" от обилия информации  Улыбка
Записан

Ubuntu 18.04 LTS • LO 7.2.2.2 Community
economist
Форумчанин
***
Offline Offline

Сообщений: 1 568


« Ответ #14: 10 Ноябрь 2021, 10:36 »

Ругается что объектная переменная не установлена

oDialog - это должен быть нарисованный вами диалог, на котором должен быть контрол вида ComboBox. Без, имхо, преувеличения, программирования событий в диалогах - самое трудное, что можно придумать себе в автоматизации. Нужно любыми путями уходить от этого геморроя. Как?

Самый лучший способ - переложить геморрой на другого. То есть рисовать аналоги диалогов в... ячейках Calc! Там есть всё что нужно - Проверка данных со Списками и готовыми ахтунг-месседжбоксами, Условное форматирование, небольшие логические проверки заполненности можно реализовать Формулами. Это красота, которую умеют почти все в офисе, и когда разрешаешь им самими делать для себя приложение с личным интрефейсом - возникает синергия.   
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!