For Each cell In rng
Next cell
Isso percorre cada elemento do intervalo selecionado e faz ... nada. Quando o loop é concluído, ou seja, o código percorreu cada elemento, o valor armazenado no objeto cell
é limpo.
If Not cell.HasFormula Then
End If
Agora, cell
é uma variável vazia, ou seja, seu valor é Nothing
. Nothing
não tem nenhuma propriedade, especificamente, não tem HasFormula
property
O código que eu acho que você quer é:
For Each cell In rng
If Not cell.HasFormula Then
cell.Value = WorksheetFunction.Proper(cell.Value)
End If
Next cell
Devo acrescentar que não verifiquei se esse código realmente será executado. É apenas a ordem "correta" de execução dos comandos que você escreveu.