Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.08.2009, 18:51   #1
Chelentano
Пользователь
 
Регистрация: 06.07.2009
Сообщений: 45
По умолчанию Опять выпадающие каскадные списки!

Уважаемые господа!

Я создал двухуровневый выпадающий список (1-й список - группа продуктов, 2-й зависимый от него список - продукты, входящие в эту группу). Но в моей ситуации серьёзная проблема заключается в том, что если после того, как по какой-либо строке выбраны уже и группа продуктов и сам продукт, вернуться в ячейку группы и поменять там группу, то продукт в ячейке для зависимого списка остаётся из старой группы и Excel НИ удаляет старое (уже теперь неверное!) значение продукта НИ выдает сообщения об ошибке!!! Кто-нибудь может подсказать, как решается обычно такая проблема?

Для наглядности вложил файл.

Буду очень премного-премного благодарен!
Вложения
Тип файла: rar Продажи.rar (7.4 Кб, 67 просмотров)

Последний раз редактировалось Chelentano; 04.08.2009 в 19:03.
Chelentano вне форума Ответить с цитированием
Старый 04.08.2009, 19:30   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Можно решить так. В обработчик событий на листе вставить:

Код:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

If (Target.Address = "$B$2") Then Range("C2").Value = ""
' Если изменилось значение в яч. B2, стереть значение в C2
' и так далее
End Sub
Например, при изменении значения для всех списков в диапазоне B2:B8 соотв. правые списки обнуляются:

Код:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If (Target.Cells.Column = 2 And Target.Cells.Row >= 2 And Target.Cells.Row <= 8) Then
Cells(Target.Cells.Row, Target.Cells.Column + 1).Value = ""
End If
End Sub

Последний раз редактировалось motorway; 04.08.2009 в 19:42.
motorway вне форума Ответить с цитированием
Старый 04.08.2009, 20:07   #3
Chelentano
Пользователь
 
Регистрация: 06.07.2009
Сообщений: 45
По умолчанию

Dear Motorway! Спасибо громаднейшее!

Я написал так:

Код:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

 If Target.Column = 2 Then '2- это номер колонки, где выбирается группа продуктов

      Cells(Target.Row, 3).ClearContents '3 - это номер колонки, где уже выбирается сам продукт из группы, выбранной в колонке 2
End If
      
End Sub
И сработало! Я очень премного благодарен!!!

Последний раз редактировалось Chelentano; 04.08.2009 в 20:09.
Chelentano вне форума Ответить с цитированием
Старый 04.08.2009, 20:14   #4
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

На всякий случай можно уточнить имя листа, так как это должно применяться к 1 листу. Можно сделать проверку типа такой:
Код:
If (Sh.Name = "Таблица со списками") Then

' весь код
End if
Либо просто добавлять это не в событие изм. книги, а изм. нужного листа Private Sub Worksheet_Change(ByVal Target As Range)
motorway вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
...... и опять С++ Chaynik011091 Помощь студентам 5 24.06.2009 20:46
Зависимые выпадающие списки Axxie Microsoft Office Excel 5 16.06.2009 16:47
Выпадающие списки на ленточной форме denver_ua Microsoft Office Access 1 23.03.2009 22:30
И опять мэйлы.. Опять... Pusher PHP 6 28.06.2008 03:08