Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/140: Рейтинг темы: голосов - 140, средняя оценка - 4.56
13 / 13 / 0
Регистрация: 24.10.2015
Сообщений: 279

Worksheet_Change как обозначить Target

26.01.2016, 20:52. Показов 31983. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Люди добрые, подскажите плиз как обращаться с этим зверем: "Private Sub Worksheet_Change(ByVal Target As Range)"
В литературе типа VBA для чайников и прочей написано кратко: Хочешь, чтобы макрос срабатывал при изменении ячейки, применяй Private Sub Worksheet_Change(ByVal Target As Range). Но я понять не могу как обозначить Target. Чего не делаю - или ошибки вылезают или просто не работает. Выкручиваюсь назначением кнопки на запуск макроса, но хотелось бы освоить сию возможность.
Не прошу разжевать (хотя, если у кого хватит терпения, готов внимать пояснения), подскажите где посмотреть. Свою задачу выкладывать тоже бессмысленно, т.к. не хочу, чтобы ее решили, хочу решить самостоятельно (хватит уже на Вашей шее сидеть)
Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.01.2016, 20:52
Ответы с готовыми решениями:

Обработчик событий Worksheet_Change(ByVal Target As Range)
Привет всем у меня есть вопрос, хотя он уже поднимался, но я так и не нашёл На него однозначного ответа. Есть такая программа для...

Перестало срабатывать событие Worksheet_Change, как исправить проблему?
Добрый всем день, у меня такая вот не большая проблема. Не могу разобраться с кодом: Цель такая. Нужно чтоб при заплнение...

Как сделать чтобы событие Worksheet_Change срабатывало только при определенном условии?
а как сделать чтобы событие Worksheet_Change срабатывало только при определенном условии? Можно конечно в Worksheet_Change поставить if...

31
13 / 13 / 0
Регистрация: 24.10.2015
Сообщений: 279
27.01.2016, 16:23  [ТС]
Студворк — интернет-сервис помощи студентам
Спасибо всем. Попытаюсь переварить информацию.

Добавлено через 11 часов 46 минут
Вот попробовал создать простенький код
Visual Basic
1
2
3
4
5
6
7
8
9
Private sub worksheet_change(ByVal Target As Range)
If target.Column=1 then
For I=1 to 10
If cells(I,1)<>"" then
Cells (I,2)= date
End if
Next
End if
End sub
И почему-то не фурычит. Может потому что автоматически меняется значение в столбце 2, который я не обозначил как изменяемый?
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
27.01.2016, 16:58
Да фурычит всё... Только смысл проверять 10 ячеек, если изменяете одну? Или не одну? Или там ещё формулы пересчитываются и меняют значения?
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
27.01.2016, 17:08
Цитата Сообщение от teplovdl Посмотреть сообщение
Вот попробовал создать простенький код
Вы его в Блокноте, что ли, создали и там же пытаетесь запустить - иначе почему служебные слова if, sub с маленькой буквы?
Давайте договоримся на будущее - Вы будете копировать код прямо из редактора VBA. Иначе, если Вы хотите как-то поправить код перед выкладыванием на форум в стороннем редакторе или прямо в окне сообщения - Вы наверняка внесете ошибки, которые будут вводить участников в заблуждение относительно причины неработоспособности фактического кода.
Этот код "фурычит", если помещен в модуль листа: при изменении любой ячейки в 1 столбце, во 2-м столбце появляется дата напротив непустых ячеек А1:А10.
Но код совершает лишние действия, Вы можете наглядно их увидеть, если поставите точку останова на 1 строку и потом пройдете код по шагам - F8. Вы увидите, что после выполнения команды
Visual Basic
1
Cells(i, 2) = Date
снова вызывается эта процедура - потому что произошло изменение ячейки! К счастью, бесконечного цикла не происходит, т.к. для ячейки с датой не выполняется условие
Visual Basic
1
If Target.Column = 1 Then
и после каждой вставки даты процедура вызывается вхолостую. Но лучше избегать повторного вызова процедуры, если это не входит в ваши планы - для этого надо добавить 3 строки
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub worksheet_change(ByVal Target As Range)
  On Error Resume Next              'гарантировать, что выполнится предпоследняя строка
  Application.EnableEvents = False  'отключить вызов обработчиков событий
  If Target.Column = 1 Then
    For i = 1 To 10
      If Cells(i, 1) <> "" Then
        Cells(i, 2) = Date
      End If
    Next
  End If
  Application.EnableEvents = True   'включить вызов обработчиков событий
End Sub
0
13 / 13 / 0
Регистрация: 24.10.2015
Сообщений: 279
27.01.2016, 17:25  [ТС]
Смысл процедуры: в соседней ячейке поставить дату изменения и как это сделать без For и If честно говоря пока и не знаю, потому как если не писать For, то как обьяснить, что дату нужно в соседний столбец писать в ту же строчку. А пример писал в телефоне. Свою ошибку осознал, с аргументами согласен.
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
27.01.2016, 17:31
Цитата Сообщение от teplovdl Посмотреть сообщение
не знаю, потому как если не писать Fo
Visual Basic
1
2
3
4
5
6
Private Sub worksheet_change(ByVal Target As Range)
     On Error Resume Next              'гарантировать, что выполнится предпоследняя строка
     Application.EnableEvents = False  'отключить вызов обработчиков событий
     If Target.Column = 1 Then   Cells(Target.row, 2) = Date
     Application.EnableEvents = True   'включить вызов обработчиков событий
End Sub
1
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
27.01.2016, 17:34
Так есть ведь таргет - если это одна ячейка, и если она в первом столбце, и если она не пустая - пишите в соседнюю ячейку дату!
Можно ориентироваться по target.row, а проще использовать target.offset(0,1)
1
13 / 13 / 0
Регистрация: 24.10.2015
Сообщений: 279
27.01.2016, 19:04  [ТС]
А ведь я знал такой финт. До чего же тупы крестьянские дети...(это я про себя).

Добавлено через 1 час 23 минуты
Цитата Сообщение от SoftIce Посмотреть сообщение
On Error Resume Next * * * * * * *'гарантировать, что выполнится предпоследняя строка
Простите, это видимо тоже типа стандартный финт? И о какой строчке идет речь - об этой -
Цитата Сообщение от SoftIce Посмотреть сообщение
Application.EnableEvents = True * 'включить вызов обработчиков событий
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
27.01.2016, 21:16
Кстати - если в процессе написания кода после выполнения
Visual Basic
1
Application.EnableEvents = False
код вывалится в ошибку или ещё произойдёт что-то, и до
Visual Basic
1
Application.EnableEvents = True
дело не дойдёт - то события так и останутся отключенными, и соотв. всё перестанет "фурычить".
Выход - или выполнить эту строку любым способом, или перезагрузить Эксель.
0
13 / 13 / 0
Регистрация: 24.10.2015
Сообщений: 279
27.01.2016, 22:05  [ТС]
Цитата Сообщение от Hugo121 Посмотреть сообщение
всё перестанет "фурычить"
0
0 / 0 / 0
Регистрация: 13.12.2024
Сообщений: 5
13.03.2025, 15:06
Люди добрые, помогите пожалуйста. Нужно чтобы была возможнасть и в ручную менять и чекбоксом.
Но работает только если вручную менять:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Worksheet_Change(ByVal Target As Range)
    ' Проверяем, была ли изменена ячейка C3
    If Not Intersect(Target, Me.Range("C3")) Is Nothing Then
        ' Отключаем события, чтобы избежать рекурсии
        Application.EnableEvents = False
        
        ' Получаем значение из ячейки C3 и преобразуем его в Boolean
        Dim dVal As Boolean
        dVal = CBool(Me.Range("C3").Value)
        
        ' Управляем видимостью картинок
        If dVal Then
            Me.Shapes("Picture 22").Visible = True
            Me.Shapes("Picture 21").Visible = False
        Else
            Me.Shapes("Picture 22").Visible = False
            Me.Shapes("Picture 21").Visible = True
        End If
        
        ' Включаем события обратно
        Application.EnableEvents = True
    End If
End Sub
Если менять значения вручную: 1/0 или: True/False - работает.
Но не получается заставить реагировать на чекбокс.
Excel действия чекбокс переводит на русский язык, как ЛОЖЬ и ИСТИНА, ну и наверное по-этому не работает
Вложения
Тип файла: 7z post_29534.7z (72.2 Кб, 4 просмотров)
0
1412 / 873 / 93
Регистрация: 08.02.2017
Сообщений: 3,724
Записей в блоге: 2
13.03.2025, 15:54
Цитата Сообщение от AndreiSMT Посмотреть сообщение
Но не получается заставить реагировать на чекбокс.
Просто добавьте процедуру
Visual Basic
1
2
3
Private Sub Флажок23_Щелчок()
    Worksheet_Change Range("C3")
End Sub
и "повесьте" ее на чекбокс
1
0 / 0 / 0
Регистрация: 13.12.2024
Сообщений: 5
14.03.2025, 07:34
testuser2, спасибо вам большое! Теперь работает
Вложения
Тип файла: 7z post_29535.7z (50.9 Кб, 8 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.03.2025, 07:34

Задачка с событием Worksheet_Change
Код работает просто СУППЕР! Я его поместил в стандартный модуль Module1 с названием процедуры Поиск. К нему обращаются процедуры рабочих...

Заставить Worksheet_Change отслеживать изменения в ячейках, загружаемые c DDE-сервера
Может кто сталкивался с проблемой: задача заставить Worksheet_Change отслеживать изменения в ячейках, загружаемые c DDE-сервера, на...

Как сравнить 2 таблицы с ценами, обозначить изменения и внести поправки.
Просьба помочь в решении парочки несложных задач на ВБА (слабак я в ВБА), инфо в файле. Смысл в следующем: Есть длинный список...

Ввести 4 слова, ввести 1 букву и обозначить слова, оканчивающиеся на эту букву
Ввести 4 слова, ввести 1 букву и обозначить слова, оканчивающиеся на эту букву

Как обозначить разряд десятки в трехзначном числе (VBA)
Дано трехзначное число, любое. Нужно каждый разряд обозначить через переменную, к примеру XYZ. Я обозначил X (сотни) и Z (единицы) так:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru