powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Распознать отмену изменений в Validation.
7 сообщений из 7, страница 1 из 1
Распознать отмену изменений в Validation.
    #35800878
nporaMep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здраствуйте,

Пытаюсь настроить событие Worksheet_Change, чтобы оно выполнянло код при изменении ячейки с выпадающим списком (через validation). Нужно, чтобы оно происходило тогда, когда значение выбрано из списка.
Сейчас проблема в том, что если ввести туда что-то, потом в окне с ошибкой нажать Cancel, то worksheet_change выполняется 2 раза, причем оба раза Target.Value одинаковое.

Проверяю так:
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("E7").Item(1).Address = Target.Address Then
MsgBox Range("E7").Item(1).Value & vbCr & Target.Address
End If
End Sub

Соответственно пока я правлю на неправильные значения в списке и жму Retry этот эвент не выполняется, но потом если я нажму Cancel либо выберу нормальное значение из списка то этот MsgBox выскакивает столько раз сколько я нажал retry/cancel.
...
Рейтинг: 0 / 0
Распознать отмену изменений в Validation.
    #35801162
LidaRoz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно перехитрить иксель так:


Private Sub Worksheet_Change(ByVal Target As Range)
if Range("E7").Item(1).Value<>"" then
If Range("E7").Item(1).Address = Target.Address Then
MsgBox Range("E7").Item(1).Value & vbCr & Target.Address
End If
endif
End Sub
...
Рейтинг: 0 / 0
Распознать отмену изменений в Validation.
    #35801417
nporaMep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так суть в том, что эвент вызывается когда validation закончилось и
Range("E7").Item(1).Value = выбранному из списка значению либо предыдущему значению (если было нажато cancel).
Когда жмешь просто del на ячейку то worksheet_change вообще не вызывается.
...
Рейтинг: 0 / 0
Распознать отмену изменений в Validation.
    #35802149
LidaRoz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вам надо показывать сообщение только когда выбрано новое значение?

можно тогда запоминать значение в переменную и потом сравнивать

Dim old As String


Private Sub Worksheet_Change(ByVal Target As Range)
If old <> Target.Value Then
If Range("E7").Item(1).Address = Target.Address Then
MsgBox Range("E7").Item(1).Value & vbCr & Target.Address
End If
old = Target.Value
End If
End Sub




hope this is helpfull
...
Рейтинг: 0 / 0
Распознать отмену изменений в Validation.
    #35802218
nporaMep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поясню ещё раз что происходит :)

есть код
Код: plaintext
1.
2.
If Range("E7").Item( 1 ).Address = Target.Address Then
  MsgBox Range("E7").Item( 1 ).Value & vbCr & Target.Address
End If

В Е7 список предположим из 5 значений "Value1, Value2, Value3, Value4, Value5"
Выбрано предположим Value3.

Я жму и мне лень тыкать мышкой, печатаю Vale1, жму ентер, выдает ошибку, жму retry
Исправляю на Value1, жму ентер.

Выскакивает 2 MsgBoxа по очереди с одинаковым текстом:
Value1
$E$7

То есть это означает, что 2 раза выполняется worksheet_change с одинаковым Target (уже после всех изменений validation). Если ошибочно ввести 2-3-4-5 раз, то код выполнится 2-3-4-5 раз.

Есстественно у меня там не MsgBox должен быть, а некий код на 1-2 секунды выполнения (забрать текст из таблицы, форматнуть, скопировать в специальное место, в зависимости от нового значения забрать из большой таблицы новые данные и записать в маленькую таблицу, форматнуть опятьже).
Ок, когда оно выполняется 1 раз, экран мигнул и юзер доволен, но когда оно 5 раз прыгает и мигает 10 секунд выглядит криво :)
...
Рейтинг: 0 / 0
Распознать отмену изменений в Validation.
    #35802291
LidaRoz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nporaMep,

в последнем варианте я предложила сравнивать текущее значение с предыдущему и, если значение не равно, код выполнится, если же равно не выполнится. При этом ивент будет срабатывать несколько раз при ретри и кенсел, но код не будет выполняться, т.к. значение при этом не будет меняться.
...
Рейтинг: 0 / 0
Распознать отмену изменений в Validation.
    #35802407
nporaMep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а ну да в принципе, чего-то я не понял в начале :)
спс за идею
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Распознать отмену изменений в Validation.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]