Страницы: 1
RSS
Неопнятное прерывание кода., Как избавиться?
 
Здравствуйте!
есть примерно такой код:
     
Код
 Set Cel = .Cells.Find(What:=Brn, LookIn:=xlValues, LookAt:= _
        xlWhole, SearchOrder:=xlByColumns, MatchCase:= _
        False, SearchFormat:=False)
        Adr = Cel.Address
' находим первую ячейку равную Brn
' здесь выпоняется некоторый код
Do
        On Error Resume Next
        Set Cel = .Cells.FindNext(After:=Cel)
' перебираем все ячейки 
        If Cel Is Nothing Or Cel.Address = Adr Then
            Exit Do
        End If
       ' и с каждой из них делаем определенные дейсвия
' вернее не не с этими ячейками, а на онове их положения в диапазоне.
'делаем расчеты
    Loop

При отладке кода время от времени васкакивает такое сообщение:
При этом всегда останавливается на строке
If Cel Is Nothing Or Cel.Address = Adr Then
Что это такое, и как от этого избавиться?
 
Михаил С., здравствуйте. Вам надо одну проверку делать отдельно от другой, т.к. если Cel Is Nothing то она не может содержать адреса, т.е. Cel.Address = Adr вызывает ошибку. Например, так:
Код
If Cel Is Nothing Then 
' code
ElseIf Cel.Address = Adr Then 
' code
end if

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
вот эту вот Cel Is Nothing я уже добавил апосля...
Поначалу было просто
Код
If  Cel.Address = Adr Then

и время от времне на этой строке останов. Жмешь продолжить - все завершает нормально.
 
Доброе время суток
Михаил С., в целом не очень грамотная работа по использованию поиска. Лучше так
Код
Set Cel = .Cells.Find(What:=Brn, LookIn:=xlValues, LookAt:= _
        xlWhole, SearchOrder:=xlByColumns, MatchCase:= _
        False, SearchFormat:=False)
'делаем пока не получим ничего не найдено (Nothing)
Do Until Cel Is Nothing
    'Здесь чего-то делаем с Cel

    'выполняем поиск следующий ячейки по заданным условиям
    Set Cel = .Cells.FindNext(After:=Cel)
Loop

Успехов.
Единственно, вам для первой найденной ячейки по условию нужно делать что-то специфическое отличное от других найденных после ячеек?
 
Вероятно это что-то с моим компом. Соратил файл до размеров примера - воспроизвести ошибку не удалось.
В файле штук 15 лисов, больше М, практчески все считается формулами, и толко один - макрос.
Цитата
Андрей VG написал:
для первой найденной ячейки по условию нужно делать что-то специфическое отличное от других найденных после ячеек?
в принципе - нет.
Просто она первая, нужно катто начать отсчет.
Если хотите, можете посмотреть, там по файлу понятно что к чему.
Макрос запускается с листа "сч.евр "; меняем значения в  D21.
 
Михаил, извините, но, честно говоря, в таком объёме кода разбираться нет желания. Стили программирования у нас с вами разные, вникать нет времени.
 
Понял причину.
В книге слишком много формул, на многих листах есть летучая - СЕГОДНЯ(), что заставляет делать пересчеты.
Выключение пересчета убрало проблему и сократило время выполнения кода.
Цитата
Андрей VG написал:
Михаил, извините, но, честно говоря, в таком объёме кода разбираться нет желания.
Андрей, не за что извинятся.
Я б и сам не стал разбираться с таким кодом без особой нужды :)
 
сообщение на скриншоте, с активной кнопкой Continue, возникает иногда после некорректной остановки макроса
лечится перезагрузкой компа
Страницы: 1
Читают тему
Наверх