Страницы: 1
RSS
Событие по изменению ячейки на листе (VBA)
 
Доброго времени суток форумчане!

Помогите решить одну проблему с которой я столкнулся, а это следующее.
Есть код макроса, установлены фильтры и выпадающие списки.
И мне туда нужно вписать код, который указан ниже. Все для того, чтоб если произойдет изменение в ячейки B4, то срабатывало условие.
Пытаюсь вызвать данную процедуру Call Worksheet_Change, но не работает.
Вызывать основной макрос из нижеуказанной процедуры мне не нужно, а вот с основного макроса обратится к этой процедуре нужно.
Кто подскажет как это сделать?
Заранее спасибо за помощь.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Range("B4"), Target) Is Nothing Then
   If City = "Город1" Then
      [b5].Validation.Delete
      [b5].Validation.Add Type:=xlValidateList, Formula1:=" Район1, Район2 "
      [b5].Validation.InputMessage = "Выберите район!"
    End If
End If
Application.EnableEvents = True
End Sub
 
Может, наоборот сделать? Т.е. из события изменения В4 на конкретном листе вызывать макрос обработки?
Кому решение нужно - тот пример и рисует.
 
Вот как раз к сожалению нет, потому что если делать наоборот, то изначально, ячейка пустая, и макрос не запустится.
А макрос должен запускаться и при пустой ячейке.
А вот если что то изменяется в ячейки, он действует по соответственному.
 
Цитата
Limos написал:
а вот с основного макроса обратится к этой процедуре нужно.
какого еще основного и в какой такой момент? Как Вы сами себе это представляете?
Если надо иметь возможность и отслеживать изменения и отдельно выполнять этот код, то можно сделать так:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    WChange Target
End Sub
Sub WChange(ByVal Target As Range)
    Dim ws As Worksheet
    Set ws = Target.Parent
    Application.EnableEvents = False
    If Not Intersect(ws.Range("B4"), Target) Is Nothing Then
       If City = "Город1" Then
          ws.[b5].Validation.Delete
          ws.[b5].Validation.Add Type:=xlValidateList, Formula1:=" Район1, Район2 "
          ws.[b5].Validation.InputMessage = "Выберите район!"
        End If
    End If
    Application.EnableEvents = True
End Sub
Sub CallFromAnotherSub()
    WChange Range("B4")
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Код конечно заманчивый, но у меня чего-то не работает.....
Я пытаюсь сделать следующее:

На листе Иксель:

- есть фильтр - город (при выборе определенного города должен открываться определенный район, изначально поле пустое, если поле пустое то выбираются все районы)
- второй фильтр - район

Таблица которая работает по фильтрам

В связи с этим мне нужно отследить событие, когда в ячейку с городом попадет значение удовлетворяющее условию, и затем будет вставлен нужный список районов для города во второй фильтр.

Макрос

Если в ячейке изменение и есть определенное значение то выбираем такое-то действие

Конец Макроса
 
Цитата
Limos написал:
с основного макроса обратится к этой процедуре нужно
Цитата
Limos написал:
нужно отследить событие, когда в ячейку с городом попадет значение
Вы для начала определитесь что Вам все же нужно, а потом уже вопрос задайте так, чтобы его поняли все, а не только Вы.

Чтобы что-то работало в зависимости от значения ячеек - надо эти значения проверять. Вот в Вашем коде - что такое City? Откуда берется? Вы хоть и отслеживаете изменение в В4, сравниваете именно с переменной City. Таким образом, чтобы не было в В4 сравнение всегда будет со значением именно City. Откуда оно берется и когда меняется - мы не знаем, у нас же только Ваш голый код. Где там списки, где города, где еще что - мы не знаем.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Решил проблему другим способом))) через связь выпадающих списков - ДВССЫЛ.
Без кода VBA. Оказалось проще.
Страницы: 1
Читают тему
Наверх