Список форумов Форум Libreoffice

Форум Libreoffice

Добро пожаловать на Форум Libreoffice!
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

English French German Italian Portuguese Russian Spanish
Связанные выпадающие списки

 
Начать новую тему   Ответить на тему    Список форумов Форум Libreoffice -> Calc
Предыдущая тема :: Следующая тема  
Автор Сообщение
vanya



Репутация: 0    

Зарегистрирован: 02.08.2011
Сообщения: 17

СообщениеДобавлено: Пт Сен 30, 2011 4:45 pm    Заголовок сообщения: Связанные выпадающие списки Ответить с цитатой

На одном из форумов обсуждалась интересная задача. Как связать выпадающие списки на листе Calc http://community.i-rs.ru/index.php/topic,21474.msg117801.html#msg117801. Смысл простой. Список выбора второго выпадающего списка должен определяться выбором элемента первого списка. И задача в принципе была решена использованием функций VLOOKUP и INDIRECT. Но осталась одна неприятность. При выборе нового элемента первого списка выбранный ранее элемент второго списка остается во втором списке, хотя должен был измениться на другой, соответствующий новому элементу первого списка.
К сожалениию, "религия", исповедуемая на том форуме - шарахаться от макросов, как черти от ладана, приводит к "монстрообразным" решениям одними только функциями Calc'а.
Поэтому приведу решение этой задачи с помощью макроса, который при изменении выбранного значения в первом списке меняет выбранное значение второго списка на первый элемент этого списка.
(Спасибо RFJ за этот макрос http://libreoffice.3nx.ru/viewtopic.php?t=26. Подробности там же.)
Код:
Sub addListener
   oDocument = ThisComponent
   oSheet = oDocument.CurrentController.getActiveSheet() 'получаем активный лист
   oListener = CreateUnoListener("OOO_", "com.sun.star.chart.XChartDataChangeEventListener")

      oCell = oSheet.getCellByPosition(1,9)
      oCell.addChartDataChangeEventListener(oListener)
End Sub

Sub OOO_chartDataChanged(oEvent)
   r=oEvent.Source.CellAddress.Row
   c=oEvent.Source.CellAddress.Column
   v=oEvent.Source.String

      Now_write(r,c,v)
End Sub

Sub Now_write(r,c,v)
   oDoc=ThisComponent
   
    oSheet1=oDoc.Sheets.getByName("Лист1")    
     oCell1=oSheet1.getCellByposition(4,4)
     addrcat=oCell1.getString()
     
   addrcat1=Split(addrcat,":")
    addrtype=Split(addrcat1(0),"!")

     oCell11=oSheet1.getCellRangeByName(addrtype(1))
     addrcat11=oCell11.getString()
     
   oSheet2=oDoc.Sheets.getByName("Лист2")
     oCell2=oSheet2.getCellByposition(c+2,r)
   oCell2.setString(addrcat11)
      
End Sub


Файл с примером http://ifolder.ru/26075304

Несколько иллюстраций.

Связанные списки на Листе2





Данные и вспомогательные вычисления на Листе1

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
RFJ



Репутация: +1    

Зарегистрирован: 02.08.2011
Сообщения: 59

СообщениеДобавлено: Сб Окт 01, 2011 7:02 am    Заголовок сообщения: Ответить с цитатой

Маленькое замечание.
Выпадающий (разворачивающийся) список - это ComboBox, а не ListBox.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
noName



Репутация: 0    

Зарегистрирован: 27.02.2016
Сообщения: 3

СообщениеДобавлено: Сб Фев 27, 2016 8:03 pm    Заголовок сообщения: Ответить с цитатой

Доброе время суток.
Спасибо за код. Удалось скомпилить. Работает как заявлено "[макрос] при изменении выбранного значения в первом списке меняет выбранное значение второго списка на первый элемент этого списка. "
Хотелось бы, чтобы в выпадающем списке на скриншоте появлялся бы второй список. В данном случае у нас появляется только первое значение второго списка, но не сам второй список.

Есть варианты как такое сделать?
Поправьте, пожалуйста, если я что-то не так понимаю.
Спасибо!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
neft



Репутация: 0    

Зарегистрирован: 19.10.2011
Сообщения: 28

СообщениеДобавлено: Вс Фев 28, 2016 6:17 pm    Заголовок сообщения: Ответить с цитатой

Выкладываю копию оригинального файла от vanya.
Там есть второй список.



Ссылка на файл:
http://my-files.ru/2kpemc
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
noName



Репутация: 0    

Зарегистрирован: 27.02.2016
Сообщения: 3

СообщениеДобавлено: Вс Фев 28, 2016 8:44 pm    Заголовок сообщения: Ответить с цитатой

Спасибо за файл!
Да, там все работает как надо.
Видимо, я что-то не так делаю.
При создании второго списка на Листе 2 все делаем как обычно - Данные -> Проверка -> Диапазон ячеек... ? Какой диапазон выбираем?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
neft



Репутация: 0    

Зарегистрирован: 19.10.2011
Сообщения: 28

СообщениеДобавлено: Вс Фев 28, 2016 9:05 pm    Заголовок сообщения: Ответить с цитатой

noName писал(а):
Спасибо за файл!
Да, там все работает как надо.
Видимо, я что-то не так делаю.
При создании второго списка на Листе 2 все делаем как обычно - Данные -> Проверка -> Диапазон ячеек... ? Какой диапазон выбираем?


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

Можно поковырять выложенный файл в свойствах этого элемента управления - там должно быть видно, как это сделано.

Или поэкспериментировать на этой копии.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
noName



Репутация: 0    

Зарегистрирован: 27.02.2016
Сообщения: 3

СообщениеДобавлено: Вс Фев 28, 2016 9:12 pm    Заголовок сообщения: Ответить с цитатой

Ясно, будем ковырять Улыбка
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Форум Libreoffice -> Calc Часовой пояс: GMT
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Вы можете бесплатно создать форум на MyBB2.ru, RSS