Лучшая практика - всегда объявлять переменные. Добавьте Option Explicit
в верхнюю часть модуля. Затем от go до Инструменты > Параметры и отметьте Требовать объявления переменной , чтобы Option Explicit
автоматически добавлялся в дальнейшем.
Поскольку c
не объявлен, это Variant
, а не Range
.
Обратите внимание, что неявное ByRef
, вероятно, должно быть явным ByVal
.
Option Explicit
Sub Code_1()
Dim c As Range
...
Dim firstAddress As String
...
End Sub
Sub Valuation(ByVal cell As Range)
...
End Sub
И, как указано в ответе на ваш предыдущий вопрос, вам необходимо отрегулировать l oop, если вы заменяете значение после того, как оно было найдено, т.е. измените:
Do
Valuation c
Set c = .FindNext(c)
Loop While c.Address <> firstAddress '<~ this will error when there are no matches left
до
Do While Not c Is Nothing
Valuation c
Set c = .FindNext(c)
Loop