В книге есть два макроса - вызывающих ошибку. Выглядят они так: [vba]
Код
Sub Макрос2() Err.Raise (431) End Sub
Sub Макрос1() Err.Raise (438) End Sub
[/vba]
Как должен выглядеть макрос, который бы реагировал на ошибку - добавляя 1 в желтую ячейку, при вызове ошибки 431, и 1 в красную ячейку при вызове ошибки 438 ?
Здравствуйте. Помогите решить вопрос.
В книге есть два макроса - вызывающих ошибку. Выглядят они так: [vba]
Код
Sub Макрос2() Err.Raise (431) End Sub
Sub Макрос1() Err.Raise (438) End Sub
[/vba]
Как должен выглядеть макрос, который бы реагировал на ошибку - добавляя 1 в желтую ячейку, при вызове ошибки 431, и 1 в красную ячейку при вызове ошибки 438 ?RipVanWinkel
У вас событие макроса добавки "1" - это щелчок по кнопке, а не ОКНО ОШИБКИ. Я имел ввиду - чтобы макрос добавки "1" - реагировал бы именно на ОКНО ОШИБКИ, а не нажатие на кнопку.
То есть я это понимаю так - что макросы вызова ошибки - это отдельные макросы, а макрос реакции на ошибку - это отдельный Макрос3. И вот этот отдельный Макрос3 - и должен реагировать на ошибку - неважно как она вызвана (в данном случае ошибки вызываются Макросом1 и Макросом2).
А вот какое СОБЫТИЕ должно вызывать Макрос3 - я не знаю (но это явно - не щелчок по кнопке).
Michael_S, не работает.
У вас событие макроса добавки "1" - это щелчок по кнопке, а не ОКНО ОШИБКИ. Я имел ввиду - чтобы макрос добавки "1" - реагировал бы именно на ОКНО ОШИБКИ, а не нажатие на кнопку.
То есть я это понимаю так - что макросы вызова ошибки - это отдельные макросы, а макрос реакции на ошибку - это отдельный Макрос3. И вот этот отдельный Макрос3 - и должен реагировать на ошибку - неважно как она вызвана (в данном случае ошибки вызываются Макросом1 и Макросом2).
А вот какое СОБЫТИЕ должно вызывать Макрос3 - я не знаю (но это явно - не щелчок по кнопке).RipVanWinkel
Сообщение отредактировал RipVanWinkel - Воскресенье, 14.05.2017, 16:11
Я наверное скоро эту сентенцию в автозамену добавлю: "А давайте сразу операционную систему перепишем под Ваше видение решения. Вы уж выкладывайте задачу, а не свое мнение на форум." Взято отсюда, но уже часто такое пишу: http://www.excelworld.ru/forum/10-33694-1#219818
Я наверное скоро эту сентенцию в автозамену добавлю: "А давайте сразу операционную систему перепишем под Ваше видение решения. Вы уж выкладывайте задачу, а не свое мнение на форум." Взято отсюда, но уже часто такое пишу: http://www.excelworld.ru/forum/10-33694-1#219818KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Вы уж выкладывайте задачу, а не свое мнение на форум
Ну вообще-то я задачу еще в первом сообщении написал. Просто потом примерно описал свое приблизительное (возможно ошибочное) видение - как ее можно решить.
Повторю задачу. Есть два макроса Макрос1 и Макрос2 - которые запускают - окна ошибок 431 и 438.
Вопрос: как должен выглядеть Макрос3 - который бы среагировал на вызов ошибки - добавив "1" - в желтую или красную ячейки - в зависимости от вида ошибки (вида всего два - 431 и 438) ?
Вы уж выкладывайте задачу, а не свое мнение на форум
Ну вообще-то я задачу еще в первом сообщении написал. Просто потом примерно описал свое приблизительное (возможно ошибочное) видение - как ее можно решить.
Повторю задачу. Есть два макроса Макрос1 и Макрос2 - которые запускают - окна ошибок 431 и 438.
Вопрос: как должен выглядеть Макрос3 - который бы среагировал на вызов ошибки - добавив "1" - в желтую или красную ячейки - в зависимости от вида ошибки (вида всего два - 431 и 438) ?RipVanWinkel
, дружище - с глубоким удовлетворением спешу сообщить Вам, что нормальный, психически здоровый человек ни с того ни с сего вызывать ошибки в СВОИХ макросах не станет. Для чего-то же этот бред Вам нужен? Но мне уже не интересно играть с Вами в кошки-мышки, желаю удачи с более терпеливыми и настойчивыми форумчанами.
, дружище - с глубоким удовлетворением спешу сообщить Вам, что нормальный, психически здоровый человек ни с того ни с сего вызывать ошибки в СВОИХ макросах не станет. Для чего-то же этот бред Вам нужен? Но мне уже не интересно играть с Вами в кошки-мышки, желаю удачи с более терпеливыми и настойчивыми форумчанами. KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Достаточно ответить на вопрос из первого сообщения
Во втором сообщении уже ответили. Можно отловить ошибку при выполнении макроса, если прописать соответствующие строки. События "ошибка" нет ни в модуле книги ни в модуле листа.
Достаточно ответить на вопрос из первого сообщения
Во втором сообщении уже ответили. Можно отловить ошибку при выполнении макроса, если прописать соответствующие строки. События "ошибка" нет ни в модуле книги ни в модуле листа.wild_pig
Как должен выглядеть Mакрос3, который бы реагировал на ошибку...
Возможно Вам это, нужно? Примерно так:
[vba]
Код
Sub Макрос1() On Error GoTo Errhnd ' вот тут Вы прописываете переход на метку Errhnd: и далее, в случае возникновения ошибки (то самое, "Событие") Err.Raise (438) Exit Sub Errhnd: Макрос3 ' вызов обработки ошибок в случае их возникновения End Sub
Sub Макрос2() On Error GoTo Errhnd Err.Raise (431) Exit Sub Errhnd: Макрос3 End Sub
Sub Макрос3()' обработка ошибок If Err = 431 Then MsgBox "431" 'вместо MsgBox ... можно прописать любые необходимые инструкции, например: Cells(8, 5) = Cells(8, 5) + 1 If Err = 438 Then MsgBox "438" 'вместо MsgBox ... можно прописать любые необходимые инструкции, например: Cells(8, 7) = Cells(8, 7) + 1 Err.Clear End Sub
Как должен выглядеть Mакрос3, который бы реагировал на ошибку...
Возможно Вам это, нужно? Примерно так:
[vba]
Код
Sub Макрос1() On Error GoTo Errhnd ' вот тут Вы прописываете переход на метку Errhnd: и далее, в случае возникновения ошибки (то самое, "Событие") Err.Raise (438) Exit Sub Errhnd: Макрос3 ' вызов обработки ошибок в случае их возникновения End Sub
Sub Макрос2() On Error GoTo Errhnd Err.Raise (431) Exit Sub Errhnd: Макрос3 End Sub
Sub Макрос3()' обработка ошибок If Err = 431 Then MsgBox "431" 'вместо MsgBox ... можно прописать любые необходимые инструкции, например: Cells(8, 5) = Cells(8, 5) + 1 If Err = 438 Then MsgBox "438" 'вместо MsgBox ... можно прописать любые необходимые инструкции, например: Cells(8, 7) = Cells(8, 7) + 1 Err.Clear End Sub