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

Пытаюсь настроить событие 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
06.02.2009, 11:10:08
    #35801162
LidaRoz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Распознать отмену изменений в Validation.
можно перехитрить иксель так:


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
06.02.2009, 12:15:59
    #35801417
nporaMep
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Распознать отмену изменений в Validation.
Так суть в том, что эвент вызывается когда validation закончилось и
Range("E7").Item(1).Value = выбранному из списка значению либо предыдущему значению (если было нажато cancel).
Когда жмешь просто del на ячейку то worksheet_change вообще не вызывается.
...
Рейтинг: 0 / 0
06.02.2009, 15:35:25
    #35802149
LidaRoz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Распознать отмену изменений в Validation.
вам надо показывать сообщение только когда выбрано новое значение?

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

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
06.02.2009, 15:55:40
    #35802218
nporaMep
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Распознать отмену изменений в Validation.
Поясню ещё раз что происходит :)

есть код
Код: 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
06.02.2009, 16:18:44
    #35802291
LidaRoz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Распознать отмену изменений в Validation.
nporaMep,

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


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