Listbox - изменение диапазона списка при помощи макросов Basic

Автор DigitaLS, 27 октября 2023, 10:48

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

DigitaLS

Добрый день друзья!
Прошу помочь с поиском оператора для вставки в строку свойств ListBox указанного диапазона.

Listbox\Свойство элемента\Данные\Исходный диапазон ячеек

На данный момент нашёл несколько операторов для изменений данных кнопки раскрывающегося списка "ListBox"  : Tag, ListSource, Enabled, Refresh, LineCount, Text, DefaultText, Name, EnableVisible, TextColor, FontName, DataField.
Но какой оператор отвечает за свойство в строке "Исходный диапазон ячеек" найти не смог:
нужно указать в этой строке диапазон : Sheet2.A1:A10

Sub ChangeListSource
Dim oDrawPage As Object
Dim oListBox As Object
Dim oSheet As Object
Dim oForms As Object
Dim oForm As Object

oSheet = ThisComponent.Sheets.GetByName("Sheet1")
oDrawPage = oSheet.DrawPage
oForms = oSheet.DrawPage.Forms
oForm = oForms.getByIndex(0)
oListbox = oForm.getByName("Listbox_001")

'например оператор "Tag"
oListBox.Tag = "Какой то текст" 'Вставляет текст в строку "Дополнительная информация"
End Sub


bigor

Добрый
Есть oListBox.ListEntrySource.CellRange, но оно только для чтения. Т.е. если вы зададите руками диапазон ячеек в свойствах элемента, то макросом можно получить этот диапазон.
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

sokol92

#2
Да, тут путь довольно извилист.
Option Explicit
Sub ChangeListSource
  Dim oListBox As Object
  Dim oSheet As Object
  Dim oCellRangeListSource
  Dim namedValues(0) as new com.sun.star.beans.NamedValue
 
  oSheet = ThisComponent.Sheets(0)
  oListbox = oSheet.DrawPage.Forms.getByIndex(0).getByIndex(0)
 
  namedValues(0).Name="CellRange"
  namedValues(0).Value=oSheet.getCellRangeByName("A1:A5").rangeAddress
  oCellRangeListSource=ThisComponent.createInstanceWithArguments("com.sun.star.table.CellRangeListSource", namedValues)
  oListbox.setListEntrySource oCellRangeListSource
End Sub


P.S. Поиск автора идеи привел к этой теме: Code to increase ComboBox ListEntrySource.

Описание сервиса CellRangeListSource.
Владимир.

DigitaLS

#3
Спасибо Вам большое за помощь :beer:  Всё работает как часы.  sokol92, действительно путь извилистый
Адаптировал код под свои нужды:

Option Explicit
Sub ChangeListSource3
  Dim oListBox As Object
  Dim oSheet1 As Object
  Dim oSheet2 As Object
  Dim oCellRangeListSource
  Dim namedValues(0) as new com.sun.star.beans.NamedValue
 
  oSheet1 = ThisComponent.Sheets.GetByName("Лист1") 'Лист1 - название листа на котором находится кнопка (Listbox_001)
  oSheet2 = ThisComponent.Sheets.GetByName("Лист2") 'Лист2 - название листа со списком диапазон которого указываем ниже.
  oListbox = oSheet1.DrawPage.Forms.getByIndex(0).getByName("Listbox_001")   'Listbox_001 - это название кнопки - раскрывающегося списка.
 
  namedValues(0).Name="CellRange"
  namedValues(0).Value=oSheet2.getCellRangeByName("A1:A10").rangeAddress
  oCellRangeListSource=ThisComponent.createInstanceWithArguments("com.sun.star.table.CellRangeListSource", namedValues)
  oListbox.setListEntrySource oCellRangeListSource
End Sub