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

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

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

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2 3 4 »   Вниз
  Печать  
Автор Тема: Поле со списком  (Прочитано 8865 раз)
0 Пользователей и 1 Гость смотрят эту тему.
economist
Форумчанин
***
Offline Offline

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


« Ответ #30: 29 Октябрь 2019, 11:36 »

ПКМ - Свойства - Данные - Связанная ячейка - Не?
Записан

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

Сообщений: 61


« Ответ #31: 29 Октябрь 2019, 11:39 »

ПКМ - Свойства - Данные - Связанная ячейка - Не?
Не. Макросом наполняется.
Если наполнять в Sum Main - выбранное значение остаётся. В другом Sub прячется.
Записан
economist
Форумчанин
***
Offline Offline

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


« Ответ #32: 29 Октябрь 2019, 12:00 »

Возможно проблема с самим контролом Listbox/Список, я зарекся его использовать. Лучше уж Combobox/Поле со списком. В нем ещё и быстрый поиск есть, если дофига элементов (а по закону подлости их станет дофига практически сразу).

У контрола есть куча (20 шт.) событий, которые можно обвесить макросами. Если сделать что-то неправильно - выбор будет слетать. Я предупреждал про сложности программирования событий, и три книжки слал для того чтобы их содержимым вас отговорить :-) Хотя там на 1,5 тыс страниц есть решения 95% всех возможных проблем.

Если есть опыт в VBA - используйте его для простых и 100% работающих в Calc вещей - перебора, циклов по ячейкам, замены значений, сортировки итп. А контролы (комбобоксы) - просто свяжите с диапазонами ячеек. Это работает железобетонно. Сравните свой код заполнения контрола - с работающим кодом VBA в Calc в короткой нотации:
Код:
set ms = Array("Январь", "Февраль", "Март", "Апрель", "Май")
[A1:A5]= Application.Transpose(ms)
     
Записан

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

Сообщений: 61


« Ответ #33: 29 Октябрь 2019, 12:05 »

К сожалению, тройной связанный список с разными вариантами выполнения в завистмости от выбранного не возможно реализовать формулами. Выбор из разных листов из разных ясеек. Не так выразился. Возможно, но длина формулы будет как от земли до луны. Запутаться можно. В данном случае только макрос.
Записан
ali_vlad
Форумчанин
***
Offline Offline

Сообщений: 61


« Ответ #34: 29 Октябрь 2019, 12:25 »

Застрял на одном моменте: проверка добавляемого значения на уникальность (чтобы не было повторов). Как это можно решить через макрос? Если каждый раз проверять последовательно на совпадение с кажлым элементом списка через for - это будет долго. Иного в голову не пришло.
Записан
economist
Форумчанин
***
Offline Offline

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


« Ответ #35: 29 Октябрь 2019, 12:31 »

ali_vlad - формулы я вам в #32 и не предлагал, только рабочий VBA-код, использующий готовую автоматизацию - свойства контролов в виде связанных ячеек диапазонов.
 
В оправдание формул, для тех кто рассматривает такой способ построения прикладных интерфейсов: есть файлы и в них по 5 связанных списков (Данные - Проверка) на формулах-диапазонах. Да, формулы читаются тяжело, но работают безотказно, все диапазоны - авторасширяемые, по мере ручного добавления данных (или макросного).  

Я сравнивал сколько времени кодинга уходит на написание и отладку полноценного Диалога с пятью зависимыми комбобоксами и двумя кнопками и второй вариант: обычный лист, "имитацию" диалога, сделанный только на формулах + 2 кнопки (размерами ячеек можно "повторить" дизайн диалога на 90%). Так вот, соотношение трудозатрат оказалось 6:1. Если время дорого - прототипируйте возможностями Calc, а не на Basic. Для красоты - да, нужны диалоги, но отрисовку и события придется хардкодить нипадцки.  
Записан

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

Сообщений: 61


« Ответ #36: 29 Октябрь 2019, 12:42 »

ali_vlad - формулы я вам в #32 и не предлагал, только рабочий VBA-код, использующий готовую автоматизацию - свойства контролов в виде связанных ячеек диапазонов.
 
В оправдание формул, для тех кто рассматривает такой способ построения прикладных интерфейсов: есть файлы и в них по 5 связанных списков (Данные - Проверка) на формулах-диапазонах. Да, формулы читаются тяжело, но работают безотказно, все диапазоны - авторасширяемые, по мере ручного добавления данных (или макросного). 

Я сравнивал сколько времени кодинга уходит на написание и отладку полноценного Диалога с пятью зависимыми комбобоксами и двумя кнопками и второй вариант: обычный лист, "имитацию" диалога, сделанный только на формулах + 2 кнопки (размерами ячеек можно "повторить" дизайн диалога на 90%). Так вот, соотношение трудозатрат оказалось 6:1. Если время дорого - прототипируйте возможностями Calc, а не на Basic. Для красоты - да, нужны диалоги, но отрисовку и события придется хардкодить нипадцки. 
Я согласен потратить своё личное время на разработку диалога для себя. Это будет двойная ввгода. Во первых, это будет бесценный опыт в изучении и практмческом применении Basic'а, во вторых, в своём проекте одними сптсками я не ограничусь. Будет авторизация и разграничение прав доступа с блекджеком и шл@@@ми.
Да и в связи с переходом на линукс придётся переписывать (адаптировать) мои ранние "произведения искусства".
Макрос, только макрос.
Но вернемся к нашим спискам. Что посоветуете для быстрой проверки на уникальность добавляемого элемента в список?
Записан
mikekaganski
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 2 049


« Ответ #37: 29 Октябрь 2019, 12:47 »

проверка добавляемого значения на уникальность (чтобы не было повторов).

Код:
Function CheckDup(rowStr As String, byRef UniqueColl)
    CheckDup = True
    On Error GoTo duplicateRow
    UniqueColl.Add(1, rowStr) ' Fails if exists
    CheckDup = False
duplicateRow:
End Function

...

    Dim NoDupes As New Collection
    For ...
        If (CheckDup(checkStr, NoDupes)) Then ' Duplicate
            ...
        Else ' Unique
            ...
        End If
    Next
Записан

С уважением,
Михаил Каганский
ali_vlad
Форумчанин
***
Offline Offline

Сообщений: 61


« Ответ #38: 29 Октябрь 2019, 15:41 »

проверка добавляемого значения на уникальность (чтобы не было повторов).

Код:
Function CheckDup(rowStr As String, byRef UniqueColl)
    CheckDup = True
    On Error GoTo duplicateRow
    UniqueColl.Add(1, rowStr) ' Fails if exists
    CheckDup = False
duplicateRow:
End Function

...

    Dim NoDupes As New Collection
    For ...
        If (CheckDup(checkStr, NoDupes)) Then ' Duplicate
            ...
        Else ' Unique
            ...
        End If
    Next
Как я понял, это коллекция. В связи с этим 2 вопроса: как её правильно объявить (As ###)?
Записан
mikekaganski
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 2 049


« Ответ #39: 29 Октябрь 2019, 15:51 »

Как я понял, это коллекция. В связи с этим 2 вопроса: как её правильно объявить (As ###)?
Не понял. Во-первых, задан один вопрос ("как её правильно объявить?"), а не два. А во-вторых, в коде она объявлена в единственной строке, начинающейся с Dim.
Записан

С уважением,
Михаил Каганский
ali_vlad
Форумчанин
***
Offline Offline

Сообщений: 61


« Ответ #40: 29 Октябрь 2019, 15:54 »

Как я понял, это коллекция. В связи с этим 2 вопроса: как её правильно объявить (As ###)?
Не понял. Во-первых, задан один вопрос ("как её правильно объявить?"), а не два. А во-вторых, в коде она объявлена в единственной строке, начинающейся с Dim.
У меня ругается на необъявленную переменную в функции.
И не работает. Дубликаты проходят.
Записан
mikekaganski
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 2 049


« Ответ #41: 29 Октябрь 2019, 15:57 »

У меня ругается
Не могу проверить.
Записан

С уважением,
Михаил Каганский
ali_vlad
Форумчанин
***
Offline Offline

Сообщений: 61


« Ответ #42: 29 Октябрь 2019, 16:02 »

У меня ругается
Не могу проверить.
У меня ругается
Не могу проверить.
Я думаю из-за UniqueColl. Может её надо заранее как то объявить?
Записан
mikekaganski
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 2 049


« Ответ #43: 29 Октябрь 2019, 16:08 »

UniqueColl - это параметр в функции. Он объявлен в строке
Код:
Function CheckDup(rowStr As String, byRef UniqueColl)
и не нуждается в дальнейших объявлениях.

Но всё это не имеет значения. Имеет значение то, что нельзя пытаться исправлять ошибки, не видя код.
Записан

С уважением,
Михаил Каганский
ali_vlad
Форумчанин
***
Offline Offline

Сообщений: 61


« Ответ #44: 29 Октябрь 2019, 16:19 »

UniqueColl - это параметр в функции. Он объявлен в строке
Код:
Function CheckDup(rowStr As String, byRef UniqueColl)
и не нуждается в дальнейших объявлениях.

Но всё это не имеет значения. Имеет значение то, что нельзя пытаться исправлять ошибки, не видя код.
Я наверно в глаза долбился, когда переписывал. Но сейчас другая проблема: дублей навалом. Могу приложить только фото скрипта
Записан
Страниц: « 1 2 3 4 »   Вверх
  Печать  
 
Перейти в:  

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