Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 36
1

Как сделать чтобы блокировались сообщения об ошибках в Excel?

13.01.2011, 23:32. Показов 5770. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть такой макрос который бы не показывал (блокировал) сообщения об ошибках типа: #ДЕЛ/0!.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.01.2011, 23:32
Ответы с готовыми решениями:

Подскажите, как настроить QtCreator так, чтобы сообщения об ошибках выводились в правильной кодировке?
Помогите разобраться, почему при компиляции этого проекта высыпается куча ошибок, и подскажите, как...

Как создать пароль, чтобы заданные кнопки блокировались
Как создать пороль чтобы выбора пользователей блокировальсь кнопки склад поставщик итд

Как читать сообщения об ошибках???
Подскажите, Как читать сообщения об ошибках, которые выдаются сервером в дебильной кодировке, типа:...

Как в русском IE 5.0 читать сообщения об ошибках?
Как в русском IE 5.0 читать сообщения об ошибках, а то пишет всякую чушь. (Если нет выхода, то как...

20
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
14.01.2011, 08:06 2
Всё тот же самый макрос :
Visual Basic
1
2
3
4
5
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
On Error GoTo Err
iDate = Target.Value
If IsError(iDate) = True Then Application.Undo
Err: End Sub
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
14.01.2011, 08:30 3
Если на момент ввода данных, которые вызывают сообщение об ошибке, в этой ячейке уже находится значение ошибки, то используйте этот код :
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
On Error GoTo Err
iDate = Target.Value
If IsError(iDate) = True Then
   Application.EnableEvents = False
   '-------------------------------------------------'
   Rem Если нужно оставить старое значение ошибки
   Application.Undo
   Rem Если нужно полностью очистить ячейку от ошибок
   Target.Value = ''
   Rem Необходимо выбрать один из двух вариантов
   '-------------------------------------------------'
   Application.EnableEvents = True
End If
Err: End Sub
0
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 36
14.01.2011, 10:07  [ТС] 4
Вставляю код в лист где у меня показывае ошибку: #ДЕЛ/0!, перезагружаю книгу но что-то сообщение об ошибке так и осталось.
0
1 / 1 / 0
Регистрация: 03.07.2009
Сообщений: 112
14.01.2011, 11:33 5
Может быть так
Visual Basic
1
2
3
4
5
6
7
8
9
   On Error GoTo err
   x = 1 / 0
   Stop
err:
   If err.Number <> 11 Then 'если не деление на ноль -сообщать
      MsgBox err.Number
      MsgBox err.Description
   End If
   Resume Next
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
14.01.2011, 11:57 6
Мой макрос работает при введение в ячейку формулы или функции, которая возвращяет результат в виде ошибки. Если Вам нужно, что-то другое, то Вы всегда можете написать мне напрямую.
To gacol
Человек просил написать макрос, который будет определять ВСЕ ошибки, в том числе и деление на 0.
0
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 36
14.01.2011, 13:30  [ТС] 7
Спасибо pashulka напишу напрямую.
0
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 4
09.10.2011, 12:22 8
Добрый день, подскажите плиз., где можно найти информацию о создании макроса по замене значения в книге 'ошибки деления на ноль' (#ДЕЛ/0!) на ноль (0).
0
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 4
09.10.2011, 12:39 9
Сори, интересует тот же вопрос что и пользователя 's707'.
А именно, 'Есть такой макрос который бы не показывал (блокировал) сообщения об ошибках типа: #ДЕЛ/0!'.
Если можно дополнить, чтобы формула сохранялась, но ошибка #ДЕЛ/0! не отображалась.
0
4 / 4 / 2
Регистрация: 06.03.2011
Сообщений: 151
09.10.2011, 12:49 10
=ЕСЛИ(Делитель <> 0; ФормулаСПотенциальноНулевымДелителем; '')
0
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 4
09.10.2011, 12:59 11
Дело в том что таких ячеек очень большое количество и ручную исправлять займет много времени, а если макрос существует то будет намного быстрей
0
22 / 5 / 1
Регистрация: 05.09.2010
Сообщений: 370
10.10.2011, 16:03 12
Попройбуйте так:
Выделить область ячеек где результат формулы #ДЕЛ/0! и выполните макрос:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub ПодправитьФормулы()
  Dim rng As Range, rn As Range
  Set rng = Selection
  On Error GoTo 0
  For Each rn In rng
    If Left(rn.Formula, 1) = "=" Then
      s = rn.Value
      If CStr(s) = "Error 2007" Or CStr(s) = "Error 2042" Then
        f = Right(rn.Formula, Len(rn.Formula) - 1)
        rn.Formula = "=IF(ISERROR(" & f & "),0," & f & ")"
      End If
      Err.Clear
    End If
  Next
End Sub
PS
Работает для #ДЕЛ/0! и #Н/Д
0
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 4
10.10.2011, 18:35 13
Огромное спасибо. Все работает, как в сказке.
0
Сумрак
10.10.2011, 19:11 14
Что то тут так оживленно, решил тоже ответить :-))
мне в голову такой вариант пришел
Visual Basic
1
2
3
4
5
6
Sub sss()
ActiveSheet.Cells.SpecialCells(xlCellTypeFormulas, xlErrors).Select
    For Each mCl In Selection.Cells
        If CStr(mc.Value) = "Error 2007" Then mCl.Formula = "=0"
    Next mCl
End Sub
Это для деления на ноль. Хотел как обработчик ошибок сделать, но чтото не могу из Cells.value обьект Error извлечь чтоб считать его номер. Пришлось грубо... но работает.
Сумрак
10.10.2011, 19:15 15
Да... еслине трудно, скажите каков результат по скорости обработки... выше приведенного макроса с еще выше приведенным макросом... А то я не тестил его.
22 / 5 / 1
Регистрация: 05.09.2010
Сообщений: 370
11.10.2011, 11:28 16
Да особой разницы нет, если выровнить шансы.
Я говорю об условии проверки (исключть or) и об одинаковой формуле (=0 или =если(еошибка)...), и одинаковом диапозоне ячеек.

Я думаю формула =если(еошибка) всё-таки предпочтительнее чем =0, поскольку если значения на листе изменятся таким образом, что в результативной ячейке должно уже отразиться что-то, а не #ДЕЛ/0! то в Вашем случае в ней останется 0, а это не есть гут...
0
0 / 0 / 0
Регистрация: 27.04.2009
Сообщений: 265
11.10.2011, 14:12 17
=Если(ЕОШИБКА(формула)=ЛОЖЬ;формула;"")
0
Сумрак
11.10.2011, 16:32 18
:-))) я не про шансы...
просто я исключил перебор всех ячеек, оставил только с ошибками в формуле. А про формулу я с Вами согласен. Просто не стал я с формулой заморачиваться. Но не кто же не мешает туда поставить какую угодно... Мне просто интересно на сколько выйгрыш в переборе только ошибочных.
22 / 5 / 1
Регистрация: 05.09.2010
Сообщений: 370
12.10.2011, 07:47 19
Сумраку
Я сам не ожидал таких результатов, поскольку обход в Вашем случае идет по ячейкам с ошибками.
Так вот, сделал 2 колонки в ячейках которых сплошником #ДЕЛ/0!
выделяю эти колонки запускаю первый макрос (немного откорректированный) получаю результат 1м 30с. Запускаю приведенный Вами 1м 29с. Как бы все сходится...
Затем делаю просветы так, что соотношение ячеек с ошибками к пустым 2 к 4. Выделяю ДВЕ колонки запускаю 1-й макрос, результат 27с, а второго 6м 2с! Выделил ВСЕ ячейки запустил 1-й макрос, результат 6м 2с!
Получилось, что если ячейки с ошибками находятся в шахматном порядке то, SpecialCells(xlCellTypeFormulas, xlErrors) получает ВСЕ ячейки, а если сплошником, то только ячйки с ошибками.
Бред, впрочем, может я что-то нетак делал...
0
Сумрак
13.10.2011, 04:46 20
Протестил, тоже... результат таков.
1. Вы сделали ошибочный вывод вероятно... т.к. с 1 макросом вы выделяли столбцы для Selection. Во втором макросе. автоматически все с ошибками попали в Selection.
2. Условие на проверку Err Я в обоих сделал одинаковую. Соответственно в результате выйгрышь в скорости второго, пропорцеонален кол-ву ошибок на листе. Этого как бы и следовалдо ожидать. Т.к. ячееки перебераются только со ошибками.
Но если все ячейки Selection c Ошибкой, то почемуто 1 вариант работает чуток быстрее.
13.10.2011, 04:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2011, 04:46
Помогаю со студенческими работами здесь

Как пользовательские сообщения об ошибках в тригере передать в VB?
Есть связь VB6 - ADO - SQLServer 7.0 Часть логики сделана на тригерах. Например : есть тригер на...

Как в Delphi отменить сообщения о критических ошибках
Здравствуйте! Как в Delphi отменить сообщения о критических ошибках, при выполнении уже готовой...

Как компилятор передаёт в IDE сообщения об ошибках?
Как компилятор передаёт в IDE сообщения об ошибках/итогах компиляции? Если компилировать без IDE...

Как сделать так, чтобы в браузере отображались сообщения об ошибке
Кто-нибудь знает как сделать так, чтобы в браузере отображались сообщения об ошибке, а не просто...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru