![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 24.07.2010
Сообщений: 3
|
![]()
Хочу организовать конфигуратор некоторого объекта.
Каждая конфигурация/исполнение/модификация объекта определяется набором ключевых парметров. В приложенном файле приведён пример описания объекта. В данном примере использовано 4 параметра (в общем случае число параметров заранее неизвестно). В строке №2 содержатся имена параметров. В строке №3 приведены списки возможных значений для каждого из параметров (количество значений в каждом списке может варьироваться). Начиная со строки №5 заданы запрещённые комбинации т.е. разрешённые значения парметров набранные в определённом порядке которые не имеют право на существование. Например, строку 4 следует читать так: Объект не может быть длины 50, ширины 20 и высоты 10 независимо от цвета. Подразумевается что пользователь должен сконфигурировать объект задав набор параметров на втором листе в ячейках A1-D1 Вопрос: возможно ли (и если да то как) ограничить пользователя в выборе параметров с учётом запрещённых комбинаций? Я не очень уверен что такое возможно реализовать в excel а потому приветствуются любые идеи (не только excel). |
![]() |
![]() |
![]() |
#2 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
Вот только не совсем понятно, как должен работать конфигуратор, и как должен выглядеть его интерфейс. Вопрос: Пользователь может ввести любой набор значений (даже недопустимый), и увидеть сообщение об ошибке (к примеру, вся строка перекрашивается в красный цвет, сигнализируя об ошибке ввода); или же надо вообще не допускать ошибочного ввода (к примеру, ввел пользователь первые 2 параметра 50 и 20 - и программа автоматически удаляет из выпадающего списка третьего параметра значение 10 - как недопустимое)? Во втором случае - список допустимых значений для каждого параметра (для выпадающих списков) желательно иметь в виде таблички (а не список значений через запятую в ПроверкеДанных) - поскольку макрос будет сложным, и ввод данных проще будет реализовать через пользовательскую форму. В первом случае - всё несколько проще, поскольку цель макроса - не формировать каждый раз выпадающие списки только с подходящими значениями, а лишь проверить введенный набор значений на корректность. Обязательно выбор конфигурации делать на другом листе? Может, сделать на том же, в строке 3 ? Просто при вашем способе ввода списков значений для параметров аналогичные списки для Листа3 (настройки) и Листа2 (конфигуратор) не будут никак связаны между собой, и смысл строки 3 на Листе3 теряется. |
|
![]() |
![]() |
![]() |
#3 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]()
Сделал вам пример первого варианта:
Если выбранная конфигурация допустима, условное форматирование окрашивает поля ввода в зеленый цвет, если недопустима - в красный. Для проверки допустимости конфигурации используются макросы: Код:
В имени КоличествоЗапретов хранится количество сработавших запретов для текущего набора значений. Проверяйте. Что не так? |
![]() |
![]() |
![]() |
#4 |
Регистрация: 24.07.2010
Сообщений: 3
|
![]()
Уважаемый EducatedFool,
Второй вариант это конечно был бы высший пилотаж, но и первый вполне сгодится если сделать некоторые улучшения, а именно: - Как-то надо обеспечить возможность изменения числа параметров (вероятно анализом заполненности ячеек строки 2). В вашем примере я попробовал добавить столбец E "Материал" со списком значений "Латунь; Сталь" а в E5-E9 вписал "Сталь". Попытка установки в 3ей строке "50/30/18/Белый/Латунь" закрашивает красным ячейки A9-D9 т.е. видно что столбец E не учитывается или учитывается некорректно. - Как-то надо обеспечить возможность изменения числа запрещённых комбинаций. Аналогично добавил строку 10 и не смог по ней добиться закрашивания красным. Анализом чего этого добиться - пожалуй вопрос открытый. Дело в том что в идеале один лист XLS будет содержать данные по нескольким объектам. Слева будет добавлен столбец (или несколько столбцов) с названием объектов Ячейка A2 объединенная со всеми ячейками того же столбца относящимися к конкретному объекту. В связи с этим также возникнет необходимость переключения между полным и кратким видами (в кратком надо будет прятать запрещённые комбинации). Думаю логично это (переключение полный/краткий) будет реализовать на "промежуточных итогах" или как там оно называется. С учётом этих вновь-открывшихся обстоятельств это может оказаться не такой уж и простой задачкой ... Может объединённая ячейка это ключ к подзадаче? - Необходимо запретить сохранение файла с запрещённой комбинацией заданной в 3ей строке. Также неплохо было бы кроме подкрашивания красным цветом вывести явное предупрежение что-то типа "Заданная комбинация конфликтует с запрещённой комбинацией выделенной красным. Попытка сохранения файла с данной комбинацией будет блокирована. Пожалуйста задайте другой набор параметров." Ну и кнопка <ОК>. PS: EducatedFool, а вы опасный человек - нельзя же с такой молниеносной скоростью думать над чьими-то чужими проблемами. ![]() |
![]() |
![]() |
![]() |
#5 | |||||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]()
Это был лишь пробный вариант.
Если он вас устроил - то первые 2 пожелания воплотить в коде очень легко. Цитата:
И над алгоритмом придётся немало потрудиться. Да и не всегда стабильно он будет работать. Так что, не советую второй. Первый вариант проще и удобнее. Цитата:
Const ОбрабатываемыеСтолбцы = "A:D" Достаточно заменить эту строку на Const ОбрабатываемыеСтолбцы = "A:E" - и будут обрабатываться 5 столбцов. В доработанном варианте вообще убрал эту строку кода - теперь кол-во стобцов определяется по последней заполненной ячейке в первой строке. Цитата:
В доработанном варианте вообще убрал этот именованный диапазон - теперь используется встроенный в Excel объект "список" (в терминологии Excel2007 - "таблица"). Этому списку присвоено имя СПИСОК. При добавлении данных снизу или справа от этого списка он автоматически расширяется (обратите внимание на синюю рамку вокруг таблицы с запретами). При желании, можете вручную изменить размеры этого списка - в правом нижнем углу списка есть треугольничек, за который можно потянуть мышом) Цитата:
Код:
Цитата:
См. доработанный вариант: Проверьте, отпишитесь.
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
![]() Последний раз редактировалось EducatedFool; 24.07.2010 в 20:52. |
|||||
![]() |
![]() |
![]() |
#6 |
Регистрация: 24.07.2010
Сообщений: 3
|
![]()
Правильно ли я понимаю что крайняя версия макроса ориентирована на Excel2007?
Я исходно открывал 2003м и не мог понять почему нету синей рамки. Сейчас уже установил 2007й. Рамки всё равно нет, но в правом нижнем углу правой нижней ячейки диапазона описывающего запрещённые комбинации есть синий уголочек (см JPG). Автоматического расширения диапазона ячеек запрещённых комбинаций при добавлении данных в соседние с диапазоном ячейки почему-то не наблюдаю. Ручное перетаскивание синего уголочка в сторону охвата большего количества ячеек тоже не приводят к желаемому эффекту (мои потуги внести изменения в XLS прилагаю). Кстати почему-то не могу убрать зелёную заливку у ячеек нового столбца. Так много несоответствий что впору задуматься "А ровно ли у меня установился Ecxel" Поясните пожалуйста назначение строки 5. Последний раз редактировалось LuckyOwner; 25.07.2010 в 01:35. Причина: перечитал - не понравилось; попытался сформулировтаь точнее |
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 02.05.2009
Сообщений: 3,907
|
![]()
Здесь описано,что означает синий уголочек.
Анализ,обработка данных Недорого
|
![]() |
![]() |
![]() |
#8 | ||||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]()
Насчёт синей рамки - не знал, что в 2007-м она не отображается.
Я делал в 2003 - там её видно: (особенно при выделении любой ячейки ВНУТРИ списка запретов) Цитата:
Цитата:
Цитата:
Цитата:
Проверяйте обновленную версию (см. скриншот) |
||||
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
составление комбинации из 7 костей домино | невидимка | Помощь студентам | 3 | 24.04.2010 10:57 |
Нажатие комбинации клавиш | Sparky | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 7 | 09.12.2009 12:43 |
Поиск позиции комбинации | vv66 | Microsoft Office Excel | 10 | 03.11.2009 17:59 |
Нажатие комбинации клавиш | pix_l | Общие вопросы Delphi | 7 | 31.03.2009 10:12 |
Найти комбинации | zzzzz | Помощь студентам | 3 | 29.09.2008 19:44 |