Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Автоочистка ячейки по значению в другой (Worksheet_Change) - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Автоочистка ячейки по значению в другой (Worksheet_Change) (Макросы/Sub)
Автоочистка ячейки по значению в другой (Worksheet_Change)
Revengencer Дата: Пятница, 04.11.2016, 12:16 | Сообщение № 1
Группа: Проверенные
Ранг: Новичок
Сообщений: 34
Репутация: 13 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте.
Подскажите, как написать 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
Дата добавления - 04.11.2016 в 12:16
Саня Дата: Пятница, 04.11.2016, 13:57 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
[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
[/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
[/vba]

Автор - Саня
Дата добавления - 04.11.2016 в 13:57
Revengencer Дата: Пятница, 04.11.2016, 14:41 | Сообщение № 3
Группа: Проверенные
Ранг: Новичок
Сообщений: 34
Репутация: 13 ±
Замечаний: 0% ±

Excel 2016
Саня,
а вы заметили, что у меня два листа? На Лист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?
К сообщению приложен файл: Example.xlsm (13.0 Kb)


Сообщение отредактировал Revengencer - Пятница, 04.11.2016, 14:47
 
Ответить
СообщениеСаня,
а вы заметили, что у меня два листа? На Лист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
Дата добавления - 04.11.2016 в 14:41
Саня Дата: Пятница, 04.11.2016, 14:56 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
Дмитрий, код обработчика событий (Worksheet_Change) располагается в модуле соотв. листа (листа, который будет реагировать на события), а не в стандартном модуле
 
Ответить
СообщениеДмитрий, код обработчика событий (Worksheet_Change) располагается в модуле соотв. листа (листа, который будет реагировать на события), а не в стандартном модуле

Автор - Саня
Дата добавления - 04.11.2016 в 14:56
Revengencer Дата: Пятница, 04.11.2016, 15:01 | Сообщение № 5
Группа: Проверенные
Ранг: Новичок
Сообщений: 34
Репутация: 13 ±
Замечаний: 0% ±

Excel 2016
Саня,
ааа, этого я не знал.
Добавил в модуль листа, но всё равно не работает.
К сообщению приложен файл: 2253047.xlsm (15.1 Kb)
 
Ответить
СообщениеСаня,
ааа, этого я не знал.
Добавил в модуль листа, но всё равно не работает.

Автор - Revengencer
Дата добавления - 04.11.2016 в 15:01
Revengencer Дата: Пятница, 04.11.2016, 15:17 | Сообщение № 6
Группа: Проверенные
Ранг: Новичок
Сообщений: 34
Репутация: 13 ±
Замечаний: 0% ±

Excel 2016
В общем-то, макрос работает, но только если самому вручную ввести в ячейку нужное значение. А если пользоваться выпадающим списком (элемент управления формы) с ссылкой на эту ячейку, то не получается...
Похоже, это в принципе невозможно.


Сообщение отредактировал Revengencer - Пятница, 04.11.2016, 15:23
 
Ответить
СообщениеВ общем-то, макрос работает, но только если самому вручную ввести в ячейку нужное значение. А если пользоваться выпадающим списком (элемент управления формы) с ссылкой на эту ячейку, то не получается...
Похоже, это в принципе невозможно.

Автор - Revengencer
Дата добавления - 04.11.2016 в 15:17
Udik Дата: Пятница, 04.11.2016, 16:13 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Может Вам несколько другое подойдёт?
К сообщению приложен файл: 2714555.xlsx (10.1 Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеМожет Вам несколько другое подойдёт?

Автор - Udik
Дата добавления - 04.11.2016 в 16:13
Revengencer Дата: Вторник, 08.11.2016, 09:59 | Сообщение № 8
Группа: Проверенные
Ранг: Новичок
Сообщений: 34
Репутация: 13 ±
Замечаний: 0% ±

Excel 2016
Udik,
нет, это не совсем то. Пользователь выбирает и инструмент, и валюту, поэтому в ячейке D6 (выбор валюты) формул быть не должно (должен быть выпадающий список), но всё равно спасибо.
 
Ответить
СообщениеUdik,
нет, это не совсем то. Пользователь выбирает и инструмент, и валюту, поэтому в ячейке D6 (выбор валюты) формул быть не должно (должен быть выпадающий список), но всё равно спасибо.

Автор - Revengencer
Дата добавления - 08.11.2016 в 09:59
Pelena Дата: Вторник, 08.11.2016, 11:51 | Сообщение № 9
Группа: Админы
Ранг: Местный житель
Сообщений: 19177
Репутация: 4417 ±
Замечаний: ±

Excel 365 & Mac Excel
А такой вариант?
К сообщению приложен файл: 2714555.xlsm (14.8 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеА такой вариант?

Автор - Pelena
Дата добавления - 08.11.2016 в 11:51
Wasilich Дата: Вторник, 08.11.2016, 13:14 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
А если пользоваться выпадающим списком (элемент управления формы) с ссылкой на эту ячейку, то не получается...
Похоже, это в принципе невозможно.
Или я чего то не понял, или элементу управления просто надо назначить макрос.
[vba]
Код
Sub список()
If Range("J6").Value = 4 Then
Range("D6").ClearContents
End If
End Sub
[/vba]
К сообщению приложен файл: Revengencer.xls (28.5 Kb)


Сообщение отредактировал Wasilich - Вторник, 08.11.2016, 13:19
 
Ответить
Сообщение
А если пользоваться выпадающим списком (элемент управления формы) с ссылкой на эту ячейку, то не получается...
Похоже, это в принципе невозможно.
Или я чего то не понял, или элементу управления просто надо назначить макрос.
[vba]
Код
Sub список()
If Range("J6").Value = 4 Then
Range("D6").ClearContents
End If
End Sub
[/vba]

Автор - Wasilich
Дата добавления - 08.11.2016 в 13:14
Revengencer Дата: Вторник, 08.11.2016, 15:21 | Сообщение № 11
Группа: Проверенные
Ранг: Новичок
Сообщений: 34
Репутация: 13 ±
Замечаний: 0% ±

Excel 2016
Wasilich,
блин, точно! Можно ведь просто назначить макрос этому элементу) Спасибо.

Pelena,
не могу сейчас, к сожалению, скачать xlsm с рабочего компьютера, но проблема с макросом уже решена.


Сообщение отредактировал Revengencer - Вторник, 08.11.2016, 15:27
 
Ответить
СообщениеWasilich,
блин, точно! Можно ведь просто назначить макрос этому элементу) Спасибо.

Pelena,
не могу сейчас, к сожалению, скачать xlsm с рабочего компьютера, но проблема с макросом уже решена.

Автор - Revengencer
Дата добавления - 08.11.2016 в 15:21
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Автоочистка ячейки по значению в другой (Worksheet_Change) (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!