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
Я должен добавить, что я не проверял, действительно ли этот код будет работать. Это просто "правильный" порядок выполнения написанных вами команд.