На самом деле это ошибка в Excel! Это происходит только в VBA. Если вы делаете то же самое замените из пользовательского интерфейса, это работает. То же самое из записанного макроса не удается. Так что, очевидно, ошибка.
Я рекомендую прочитать все значения в массив, затем заменить и затем записать их обратно. Таким образом, ошибка не возникает, и использование массивов даже быстрее, чем использование диапазонов.
Option Explicit
Sub TEST()
Dim i As String
Dim k As String
i = "."
k = ""
Dim LastRow As Long 'find last used row (to reduce processed cells)
LastRow = Cells(Rows.Count, "P").End(xlUp).Row
Dim ReplaceValues() As Variant 'read all values into array
ReplaceValues = Range("P1:P" & LastRow).Value
Dim iRow As Long 'replace
For iRow = LBound(ReplaceValues) To UBound(ReplaceValues)
ReplaceValues(iRow, 1) = Replace(ReplaceValues(iRow, 1), i, k)
Next iRow
'write all values from array back into cells
Range("P1:P" & LastRow).Value = ReplaceValues
End Sub
Или используйте Application.Substitute
:
Sub Test()
Dim lr As Long
Dim arr As Variant
lr = Cells(Rows.Count, "P").End(xlUp).Row
arr = Range("P1:P" & lr).Value
Range("P1:P" & lr).Value = Application.Substitute(arr, ".", "")
End Sub