VBA «При ошибке Goto», не превышающий ошибки

Решение Дамиана работает, но кто-нибудь знает, почему On Error Goto не превосходит все типы ошибок на скриншоте, он проходит #DIV/0!, но не любую другую ошибку.

Я пишу код для Чистая обрезка всех ячеек в книге. Если повезет, я могу сделать это с помощью приведенного ниже кода.

 On Error GoTo c

    For Each ws In wb.Worksheets

        Set rng = ActiveSheet.UsedRange

        For Each cl In rng

                Debug.Print cl.Address
                cl.Value = WorksheetFunction.Clean(Trim(cl.Value))
                GoTo l
c:

counter = counter + 1

l:
        Next

    Next

Но проблема возникает, когда любая из ячеек содержит значения ошибок, как на снимке экрана ниже.

VBA «При ошибке Goto», не превышающий ошибки

On Error Goto VBA может превзойти ошибку #DIV/0! и выделить значение для счетчика, но не для других ошибок. Он застревает в этих ячейках.

On Error срабатывает для меня на #N/A, поэтому не совсем уверен, в чем тут дело. Я предполагаю, что ячейки содержат фактическую ошибку, а не номер ошибки или дескриптор или, например, просто текст «#N/A»? "#Н/Д" - это строка, а не ошибка, так что если это так, то код ее не ловит. Проверьте это, введя =NA() как формулу в какую-нибудь ячейку, это имитирует ошибку #N/A. Ваш код должен срабатывать при этом.
Vegard 30.05.2019 11:27

@Vegard ... Вот файл с кодом ... (drive.google.com/open?id=17H07sqzVIFOMj2psHTq6cduPq2kiUSqc) .. Если вы видите, обработчик ошибок должен пропустить все ошибки, но это только пропуск #DIV/0!

Mikku 30.05.2019 12:36
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
2
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это должно решить ваши проблемы:

 On Error GoTo c
    For Each ws In wb.Worksheets
        Set Rng = ws.UsedRange 'activesheet will always be the sheet you are using clicking the macro button
        For Each cl In Rng
                Debug.Print cl.Address
                If Not IsError(cl) Then cl = WorksheetFunction.Clean(Trim(cl)) 'check first if the value is an error, if it's not then trim
                GoTo l
c:
counter = counter + 1
l:
        Next

    Next

Мысль, использующая UsedRange, будет перебирать все ячейки, даже если они пусты, но когда-то использовались. Остерегайтесь этого.

Он хочет посчитать ошибки. Ваше решение не поможет с этим.

Adirmola 30.05.2019 10:47

@Damian ..... Это решило мою проблему, но знаете ли вы, почему On Error Resume Next не превосходит эти ошибки?

Mikku 30.05.2019 10:48

@Adirmola нигде в своем коде не считал ошибки.

Damian 30.05.2019 10:49

@MohitBansal Я не могу вам этого сказать, потому что я не уверен, но я могу сказать вам, что это работает после того, как что-то происходит, но в этом случае, поскольку ячейка является ошибкой, она не может оценить ячейку, отсюда и ошибка. Использование IsError(Cell) позволит вам обрабатывать ячейки с ошибками.

Damian 30.05.2019 10:51

@ Дамиан ... Я считаю ошибки в переменной counter, но все в порядке. Я изменил ваше решение в своем коде, и оно работает нормально. Тем не менее, я все еще задаюсь вопросом о следующем возобновлении при ошибке.

Mikku 30.05.2019 10:52

Да, я все еще хочу спать, вы могли бы избавиться от On Error GoTo c и метки c: с помощью моего кода, просто проверяя, была ли ошибка, а затем добавляя счетчик.

Damian 30.05.2019 10:57

Другие вопросы по теме