Невозможно поймать ошибку с помощью оператора ошибки

Sub TextToNum()
Dim af As Double
For Each x In Selection
On Error GoTo 10
af = x.Value 'here appears error
x.NumberFormat = Number
On Error GoTo -1
x.Value = af
10 Next x
End Sub

Если значение ячейки невозможно преобразовать в число (буквы, символы), появляется сообщение об ошибке и выполнение макроса прекращается. Передать эту ошибку через «При ошибке» не удается — сообщение об ошибке появляется в любом случае. Как это решить?


50
1

Ответ:

Решено

Вы можете использовать IsNumeric вместо проверки ошибок:

Sub TextToNum()
Dim af As Double
Dim x As Range
For Each x In Selection
    If IsNumeric(x.Value) Then
        af = x.Value
        x.NumberFormat = Number
        x.Value = af
    End If
Next x
End Sub


Интересные вопросы для изучения

Выделить ячейки, наиболее близкие к целевому значению, но игнорируя текстКак создать динамический именованный диапазон – репликация A1:INDEX(range, COUNT()) в VBA?Как условно отформатировать несмежные ячейки в Microsoft Excel на основе второго по величине значенияКак получить для каждой непустой записи данных в диапазоне вывод в трех столбцах, содержащих саму запись, заголовок столбца и заголовок строкиМогут ли функции Lambda использовать текстовые ссылки, переданные из функции ByCol?Как создать динамический именованный диапазон – репликация A1:INDEX(range, COUNT()) в VBA?Заключение переменной строки значений скобками в более крупную строку, содержащуюся в одной ячейкеМакрос для запуска строительного блока для определенного текста в документах MS WordКак вызвать формулу ТОЧНО из VBAПочему сценарий VBA не копирует/перемещает записи в следующую пустую строку?