Здравствуйте, уважаемые знатоки VBA. Сделал связь между списками в форме VBA с помощью Worksheetfunction, но при нескольких кликах на разных значениях выдает ошибку 1004. Уже всю душу вымотал в поисках ошибки - там кода-то две строчки всего! Что я сделал не так и как это можно исправить? Есть ли другие способы связи списков, кроме как через Worksheetfunction? Заранее благодарен за обстоятельный ответ.
Связанные списки в VBA, Не могу найти причину ошибки
14.10.2014 12:28:34
|
|
|
|
14.10.2014 13:25:01
Добавил пропуск ошибки - вроде работает
Изменено:
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР. |
|||
|
|
14.10.2014 13:27:25
но по прежнему интересна причина ошибки
Изменено:
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР. |
|
|
|
14.10.2014 13:36:48
Изменено:
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР. |
|||
|
|
14.10.2014 14:33:29
неверно. Думал, что проблема в присвоении нового LBproperty.RowSource в процедуре LBtovar_Click, что вызывало событие LBproperty_Change() - но ListIndex там был -1 Думал, что вот так работает совсем без ошибок.
Изменено:
F1 творит чудеса
|
|||
|
|
14.10.2014 14:55:46
Друзья, а что надо дописать, чтобы значение не терялось? Я тоже уже пробовал "перекликивать" и с помощью .ListIndex .и с помощью SetFocus - все равно ошибка выходит.
|
|
|
|
15.10.2014 00:39:14
Ну так ИМХО
решает задачу, несмотря на причину ошибки (пост #3 см.файл)
Изменено:
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР. |
|||
|
|
15.10.2014 01:22:14
Имхо, использовать WorksheetFunction в макросе... только в крайних случаях...
вместо листбоксов сделал комбобоксы, т.к. , имхо, они более подходят для выпадающих списков. Для листбоксов все тоже самое.
Изменено: |
|||||
|
|
15.10.2014 06:56:23
Да, Михаил! С комбобоксами работает! Я тоже верил, что WorksheetFunction в макросах - это признак неглубокого знания VBA! Листбоксы сделал в целях сокращения количества кликов пользователей. Попробую с листбоксами! Спасибо! !!
|
|
|
|
15.10.2014 07:02:40
|
|||
|
|
15.10.2014 09:56:47
Нет, чтобы циклом, да циклом в цикле...
|
|
|
|
17.10.2014 07:31:59
Да, Михаил! Все отлично работает и с листбоксами! Но как сделать так, чтобы при изменении первого листбокса изменялись списки и во втором и третьем списках одновременно? Т.е. при изменении ListBox1, ListBox2.ListIndex = 0 (т.е. ListBox2.Value = первое значение в списке), а в соответствии с этим, ListBox3.Listindex = 0? Нужно, чтобы при изменении любого листбокса все значения в листбоксах были явно определены, т.к. по связке "товар-свойство-признак" будет определяться цена. Пробовал переключать с помощью .ListIndex и/или .SetFocus - на второй-третий переклик выдает ошибку.
Какой код для этого потребуется? Прошу помощи!
Изменено: |
|
|
|
17.10.2014 08:27:55
Сильно не вчитывался
|
|
|
|
17.10.2014 09:26:12
Изменено:
F1 творит чудеса
|
|||||
|
|
17.10.2014 11:43:38
При изменении предыдущего листбокса меняются списки всех последующих. В нашем случае, допустим, изменили ЛБ2 - изменился ЛБ3, а ЛБ1 не изменился. Если бы были ЛБ4 и ЛБ, то и они тоже изменились бы.
"Предыдущий" и "последующий" определяются по количеству объединяемых характеристик (Товар объединяет Свойство и Признак, Свойство объединяет Признак) - чем больше, тем "первее". |
|
|
|
17.10.2014 11:45:04
|
|
|
|
17.10.2014 12:03:28
kalbasiatka, все отлично работает, но не учитывает значение из ЛБ2 при определении цены. Какой код и в каком месте нужно дописать, чтобы параметр "свойство товара" участвовал в составном имени при определении цены?
|
|
|
|
17.10.2014 12:19:07
как-то так....
Изменено: |
|
|
|
17.10.2014 13:11:39
Михаил С., большое спасибо! И снова все работает! Но как сделать так, чтобы:
кликаю ЛБ1, получаю - ЛБ2.ListIndex = 0, ЛБ3.ListIndex = 0 и на основе ЛБ1 & ЛБ2 & ЛБ3 определяю цену для лейбла1 кликаю ЛБ2, получаю - ЛБ1 указанный пользователем перед кликом на ЛБ2, ЛБ2 - выбранное значение, ЛБ3.ListIndex = 0 и на основе ЛБ1 & ЛБ2 & ЛБ3 определяю цену для лейбла1 Т.е., смысл в следующем - каждый клик по любому ЛБ должен результатом иметь цену в лейбле1, соответствующую сочетанию ЛБ1 & ЛБ2 & ЛБ3. Сейчас в файле "Макрос Связанные списки(3)" чтобы получить цену по каждому товару, нужно кликнуть три раза. Хотелось бы один. Это возможно? |
|
|
|
17.10.2014 13:21:12
|
|||
|
|
17.10.2014 14:12:20
Возможно, я плохо объясняюсь: клик по каждому листбоксу приводит все последующие листбоксы к .Listindex = 0 (так, чтобы первые значения в их списках были выделены синим), а все предыдущие сохраняют значение, выбранное пользователем ранее. Про предыдущие и последующие писал выше.
|
|
|
|
17.10.2014 18:31:39
Если я правильно понял ваш вопрос - то добавить еще один листбокс, в котором собирать выбранные значения.
|
|
|
|
21.10.2014 05:41:23
Михаил С., спасибо за ответ. А непосредственно на рабочем листе, в ячейках через ControlSource собирать выбранные значения - в чем отличие такого подхода от сбора в дополнительном листбоксе?
Изменено: |
|
|
|
21.10.2014 08:16:28
8 дней уже прошло ) Покажите кусок рабочего файла, а не "ТоварПризнак10000".
|
|
|
|
21.10.2014 12:48:38
kalbasiatka, Ваш вариант от 17 Окт 2014 08:27:55 наиболее полно соответствует моим условиям. Пожалуйста, сообщите, как с Вами связаться.
|
|
|
|
21.10.2014 22:21:48
|
||||
|
|
|||