Поле со списком

Автор ali_vlad, 23 октября 2019, 16:30

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

ali_vlad

На ЛО переехал недавно, сильно не ругайте.
Интересует следующее:
1. Наполнение списка с другого листа (по условию).
2. Событие выбора элемента списка.
3. Узнать выбранное значение
4. Очистка списка.

Если можно, пример по одной строчке.

economist

Цитата: ali_vlad от 23 октября 2019, 16:301. Наполнение списка с другого листа (по условию).
С листа эл. таблицы Calc (ods/xls)?
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

ali_vlad


economist

#3
Все это есть в книгах Эндрю Питоньяка и кое-что в книге Александра Бейна, на русском, гуглится влет.

Можно просто в свойствах контрола List/ComboBox указать Source и LinkedCell (ячейки, диапазоны) и напрямую макросом их читать/обновлять/стирать, если не хочется нырять в методы списков Add/Remove итд.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

ali_vlad

Пипец, ну и ответ, даже ссылки нет. Гугл выдаёт всяких художников и композиторов.

bigor

Поищи по форуму на питоньяка ссылка была точно
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

bigor

Вот что выдал поиск по спискам в разделе Basic. По ссылке лежит файлик со списком, ниже еще несколько.
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

ali_vlad

Цитата: Bigor от 23 октября 2019, 20:18
Вот что выдал поиск по спискам в разделе Basic. По ссылке лежит файлик со списком, ниже еще несколько.
Да уж, после VBA тут придётся начинать изучение с самого начала. Контекстной помощи при вводе нет, справки нет. Обращение к элементам вообще темный лес.
Подскажите литературу по basic'у для чайника.

ali_vlad

Мне надо, чтобы в поле со списком добавились значения ячеек (не диапазон) А1, А2, А3, А4, А5. Можно через массив.
Ошибка вылезает, я так и не понял почему.

economist

#9
В файле 2 способа, оба без макросов.

А макросом можно собрать значения и по одному добавить их в контрол. Но нужно писать обработчики событий, продумывать логику итп. Calc эту грязную работу может делать прекрасно сам (вложение).

Списки "на формулах" (Данные - Проверка) - могут быть саморасширяемыми и динамическими, зависящими от выбранных значений в других списках. При этом без макросов вообще. И работать будут быстрее чем макрос, даже на сотнях-тысячах строк (на десятках тыс. будут тупить любые способы кроме баз данных, где поддерживается понятие RowSet и курсор).
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

rami

Цитата: ali_vlad от 24 октября 2019, 23:03Ошибка вылезает, я так и не понял почему.
Элемент "Поле со списком" находится в форме, вы пытаетесь вставлять данные прямо в форму, а не в список.
Sub Main
Dim vData, oForm, oCombo, i%
vData=ThisComponent.sheets(0).getCellRangeByPosition(0, 0, 0, 5).DataArray  'A1:A6
oForm=ThisComponent.DrawPages(0).Forms.getByName("fOborud")    'форма
oCombo=oForm.getByName("sOborud")           'комбобокс
For i=0 To UBound(vData)
oCombo.insertItemText(i, vData(i)(0))       'вставка данных в комбобокс
Next
End Sub

ali_vlad

К сожалению, ни эксель, ни калк не смогут формулами сделать то, что мне нужно. Конечно, более подходящий для этого способо - БД, но sql я не знаю вообще. Может когда нибудь доросту до БД, но не сейчас.
Мне нужны выборки с разных листов многлуровневыми связанными списками. В старбейсике я хоть что-то понимаю. За пример спасибо, буду осмысливать.
Продолжение следует.

ali_vlad

Цитата: rami от 25 октября 2019, 08:19
Цитата: ali_vlad от 24 октября 2019, 23:03Ошибка вылезает, я так и не понял почему.
Элемент "Поле со списком" находится в форме, вы пытаетесь вставлять данные прямо в форму, а не в список.
Sub Main
Dim vData, oForm, oCombo, i%
vData=ThisComponent.sheets(0).getCellRangeByPosition(0, 0, 0, 5).DataArray  'A1:A6
oForm=ThisComponent.DrawPages(0).Forms.getByName("fOborud")    'форма
oCombo=oForm.getByName("sOborud")           'комбобокс
For i=0 To UBound(vData)
oCombo.insertItemText(i, vData(i)(0))       'вставка данных в комбобокс
Next
End Sub

Я не пойму, почему в документации используется .additem, который здесь не работает. А здесь используется .insertitemtext, который я нигде не встречал.
Кстати, как очистить список полностью?

mikekaganski

Цитата: ali_vlad от 25 октября 2019, 10:38Я не пойму, почему в документации используется .additem, который здесь не работает. А здесь используется .insertitemtext, который я нигде не встречал.
Честно хотел ответить. В google.com вбил "документация", открыл первую ссылку, поискал .additem ... ЧЯДНТ? ;)
С уважением,
Михаил Каганский

ali_vlad

Цитата: mikekaganski от 25 октября 2019, 10:41
Цитата: ali_vlad от 25 октября 2019, 10:38Я не пойму, почему в документации используется .additem, который здесь не работает. А здесь используется .insertitemtext, который я нигде не встречал.
Честно хотел ответить. В google.com вбил "документация", открыл первую ссылку, поискал .additem ... ЧЯДНТ? ;)
Читать умеем? Нет? А почему?
НЕ РАБОТАЕТ
НЕ РАБОТАЕТ
Так понятно?