For Each cell In rng
Next cell
Это пошагово проходит через каждый элемент выбранного диапазона и ничего не делает. Когда цикл завершен, то есть код прошел через каждый элемент, значение, сохраненное в cell
объекта, очищается.
If Not cell.HasFormula Then
End If
Теперь cell
является пустой переменной, то есть ее значение равно Nothing
. Nothing
не имеет никаких свойств, в частности, оно не имеет свойства HasFormula
Код, который, я думаю, вам нужен:
For Each cell In rng
If Not cell.HasFormula Then
cell.Value = WorksheetFunction.Proper(cell.Value)
End If
Next cell
Я должен добавить, что я не проверял, действительно ли этот код будет работать. Это просто "правильный" порядок выполнения написанных вами команд.