Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 09.12.2008, 07:29   #1
Iskin
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 307
По умолчанию Макрос проверки ошибок

Доброго дня всем! У меня следующая задача.
Надо что бы перед запуском основного макроса, производилась проверка листа на наличие следующих ошибок:
- н/д, знач! и прочее.
- а так же проверка по колонке (в моем случае М:М) на отсутствие данных. Т.е. данные листа должны находится в пределах А1:L 6..... а колонка М должна быть пуста.
При обнаружении ошибок, проверочный макрос должен выводить сообщение типа "обнаружена ошибка" и при нажатии кнопки желательно что бы макрос активировал первую ячейку с ошибкой.
Думайте глобально - действуйте локально!
Iskin вне форума
Старый 09.12.2008, 08:06   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Sub ВыделяемЯчейкиСОшибками()
On Error Resume Next
    Dim sh As Worksheet, cell As Range, ErrRa As Range: Set sh = ActiveSheet
    For Each cell In sh.UsedRange.SpecialCells(xlCellTypeFormulas)
        If cell.Errors.Item(xlEvaluateToError).Value Then
            'cell.Interior.Color = vbRed
            If ErrRa Is Nothing Then Set ErrRa = cell Else Set ErrRa = Union(cell, ErrRa)
        End If
    Next
    If Not ErrRa Is Nothing Then
        ErrRa.Select    ' выделяем все ячейки с ошибками
        MsgBox "Найдено ошибок в формулах:  " & ErrRa.Cells.Count
    End If
End Sub

Sub ПоискНепустыхЯчеекВСтолбцеМ_вариант1()
    Dim sh As Worksheet, Ra As Range: Set sh = ActiveSheet
    Set Ra = sh.UsedRange.EntireRow.Columns(13)    ' часть столбца М в используемой области листа

    If IsNull(Ra.Text) Then MsgBox "В столбце М присутствуют непустые ячейки"
End Sub

Sub ПоискНепустыхЯчеекВСтолбцеМ_вариант2()
    Dim sh As Worksheet, Ra As Range: Set sh = ActiveSheet
    Set Ra = sh.UsedRange.EntireRow.Columns(13)    ' часть столбца М в используемой области листа
    On Error Resume Next: Err.Clear
    If Not Ra.SpecialCells(xlCellTypeBlanks).Count = Ra.Cells.Count Then
        If Err.Number = 0 Then MsgBox "В столбце М присутствуют непустые ячейки"
    End If
End Sub

Последний раз редактировалось EducatedFool; 09.12.2008 в 08:10.
EducatedFool вне форума
Старый 09.12.2008, 08:24   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Первый макрос можно записать проще:

Код:
Sub ВыделяемЯчейкиСОшибками_2()
    On Error Resume Next
    Set ErrRa = ActiveSheet.UsedRange.Cells.SpecialCells(xlCellTypeFormulas, xlErrors)
    If Not ErrRa Is Nothing Then
        ErrRa.Select    ' выделяем все ячейки с ошибками
        MsgBox "Найдено ошибок в формулах:  " & ErrRa.Cells.Count
    End If
End Sub
EducatedFool вне форума
Старый 09.12.2008, 10:32   #4
Iskin
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 307
По умолчанию

Как всегда не точно сформулировал вапрос...
Посмотрел первый макрос в обоих вариантах. Все отрабатывает. Но, есть пожелания. Дело в том, что макрос ищет ошибки в функциях. Хотелось что бы ошибки искались и по заданной маске. В моем случае, Лист, где надо провести проверку, формулы не содержит, а только значения.
Думайте глобально - действуйте локально!
Iskin вне форума
Старый 09.12.2008, 11:03   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Лист, где надо провести проверку, формулы не содержит, а только значения
Попробуйте заменить в макросе xlCellTypeFormulas на xlCellTypeConstants

Цитата:
Хотелось что бы ошибки искались и по заданной маске.
Прикрепите к сообщению файл с ошибками.
Укажите несколько примеров "масок", по которым Вы хотите искать ошибки.
EducatedFool вне форума
Старый 09.12.2008, 11:41   #6
Iskin
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 307
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Попробуйте заменить в макросе xlCellTypeFormulas на xlCellTypeConstants
попробывал не сработало.

вот пример...
Было бы не плохо если при обноружении ошибок останавливались все последующие макросы.
Вложения
Тип файла: rar Книга1.rar (4.7 Кб, 27 просмотров)
Думайте глобально - действуйте локально!

Последний раз редактировалось Iskin; 09.12.2008 в 13:03.
Iskin вне форума
Старый 09.12.2008, 13:24   #7
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от Iskin Посмотреть сообщение
попробывал не сработало.
Все работает, там же есть объединенные ячейки, вот он и показывает пять ошибок, четыре С18-Ф18 и одна, И27.
Снимите объединение и будет две ошибки.
valerij вне форума
Старый 09.12.2008, 14:00   #8
Iskin
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 307
По умолчанию

Цитата:
Сообщение от valerij Посмотреть сообщение
Все работает, там же есть объединенные ячейки, вот он и показывает пять ошибок, четыре С18-Ф18 и одна, И27.
Снимите объединение и будет две ошибки.
Точно заменил на xlCellTypeConstants сработало.

Теперь останавливать все последующие макросы нет необходимости.
Спасибо!
Думайте глобально - действуйте локально!
Iskin вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен скрипт проверки интернет соединения SPIL JavaScript, Ajax 21 27.11.2008 01:07
отключение проверки при вводе engeneer Паскаль, Turbo Pascal, PascalABC.NET 21 23.07.2008 19:45
Написать програму проверки знания даты второй мировой войны. TurboPaskal Паскаль, Turbo Pascal, PascalABC.NET 22 24.04.2008 19:10
Система проверки на человека Andrey1433 PHP 2 11.03.2008 14:13