Здравствуйте. Подскажите, как написать Private Sub с Worksheet_Change, если мне требуется автоматическая очистка ячейки на одном листе, если значение в другой ячейке на другом листе принимает определенное значение? Просто не могу понять, как использовать Target.
Логика такая: if Sheets("Лист1").Range("A1") = 28 then Sheets("Лист2").Range("A1") = Empty
на Sheets("Лист2").Range("A1") стоит "Проверка данных" с типом "Список", поэтому простая формула ЕСЛИ() здесь не подходит)
Здравствуйте. Подскажите, как написать Private Sub с Worksheet_Change, если мне требуется автоматическая очистка ячейки на одном листе, если значение в другой ячейке на другом листе принимает определенное значение? Просто не могу понять, как использовать Target.
Логика такая: if Sheets("Лист1").Range("A1") = 28 then Sheets("Лист2").Range("A1") = Empty
на Sheets("Лист2").Range("A1") стоит "Проверка данных" с типом "Список", поэтому простая формула ЕСЛИ() здесь не подходит)Revengencer
' это событие произойдет, если в A1 внесут 28 ' если в A1 формула и она вернет 28, то Change не происходит (можно, напр., см. ниже) Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("A1").Address Then If Target.Value = 28 Then Stop Sheets("Лист2").Range("A1").ClearContents End If End If End Sub
Private Sub Worksheet_Calculate() If Range("A1").Value = 28 Then '... Stop End If End Sub
[/vba]
[vba]
Код
Option Explicit
' это событие произойдет, если в A1 внесут 28 ' если в A1 формула и она вернет 28, то Change не происходит (можно, напр., см. ниже) Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("A1").Address Then If Target.Value = 28 Then Stop Sheets("Лист2").Range("A1").ClearContents End If End If End Sub
Private Sub Worksheet_Calculate() If Range("A1").Value = 28 Then '... Stop End If End Sub
Саня, а вы заметили, что у меня два листа? На Лист1 проверочное условие, на Лист2 - ячейка, которую требуется очистить (на этом листе работает пользователь в момент, когда должен сработать макрос) У меня ваш код не заработал. Но если Worksheet_change работает только на одном листе, то, в принципе, можно сделать всё только на одном листе.
Опишу еще подробнее с файлом-примером и только с одним листом. На листе есть "Поле со списком" (элемент управления формы; в примере это "Инструменты") и ячейка со списком (Проверка данных; в примере это "Валюты"). Инструмент связан с ячейкой на этом же листе. Пользователь выбирает инструмент и валюту. Если он выберет инструмент "...", то поле с валютой (ячейка D6) должно очиститься.
Т.е. если рассматривать файл-пример, то простой код выглядел бы так: [vba]
Код
Sub Worksheet_Change() If Range("J6").Value = 4 Then Range("D6").ClearContents End If End Sub
[/vba] Но как из этого кода сделать постоянно работающий Private Sub?
Саня, а вы заметили, что у меня два листа? На Лист1 проверочное условие, на Лист2 - ячейка, которую требуется очистить (на этом листе работает пользователь в момент, когда должен сработать макрос) У меня ваш код не заработал. Но если Worksheet_change работает только на одном листе, то, в принципе, можно сделать всё только на одном листе.
Опишу еще подробнее с файлом-примером и только с одним листом. На листе есть "Поле со списком" (элемент управления формы; в примере это "Инструменты") и ячейка со списком (Проверка данных; в примере это "Валюты"). Инструмент связан с ячейкой на этом же листе. Пользователь выбирает инструмент и валюту. Если он выберет инструмент "...", то поле с валютой (ячейка D6) должно очиститься.
Т.е. если рассматривать файл-пример, то простой код выглядел бы так: [vba]
Код
Sub Worksheet_Change() If Range("J6").Value = 4 Then Range("D6").ClearContents End If End Sub
[/vba] Но как из этого кода сделать постоянно работающий Private Sub?Revengencer
Дмитрий, код обработчика событий (Worksheet_Change) располагается в модуле соотв. листа (листа, который будет реагировать на события), а не в стандартном модуле
Дмитрий, код обработчика событий (Worksheet_Change) располагается в модуле соотв. листа (листа, который будет реагировать на события), а не в стандартном модулеСаня
В общем-то, макрос работает, но только если самому вручную ввести в ячейку нужное значение. А если пользоваться выпадающим списком (элемент управления формы) с ссылкой на эту ячейку, то не получается... Похоже, это в принципе невозможно.
В общем-то, макрос работает, но только если самому вручную ввести в ячейку нужное значение. А если пользоваться выпадающим списком (элемент управления формы) с ссылкой на эту ячейку, то не получается... Похоже, это в принципе невозможно.Revengencer
Сообщение отредактировал Revengencer - Пятница, 04.11.2016, 15:23
Udik, нет, это не совсем то. Пользователь выбирает и инструмент, и валюту, поэтому в ячейке D6 (выбор валюты) формул быть не должно (должен быть выпадающий список), но всё равно спасибо.
Udik, нет, это не совсем то. Пользователь выбирает и инструмент, и валюту, поэтому в ячейке D6 (выбор валюты) формул быть не должно (должен быть выпадающий список), но всё равно спасибо.Revengencer