Вы не можете использовать замену или замену в назначении диапазону ячеек, и вы не можете применить формулу ко всему столбцу, который ссылается на себя (как в вашей попытке).
Если это только маленькая таблица, вы можете использовать решение для одной ячейки в ленивом цикле через ListColumn:
Dim raCell as Range
For each raCell in wsDormant.ListObjects("Table_Dormant_Stock").ListColumns("Days Last Sold").DataBodyRange
raCell = WorksheetFunction.Substitute(raCell, ".", "/")
Next
В качестве альтернативы, как отметил Скотт, использование родной функции VBA Replace более эффективно:
Dim raCell as Range
For each raCell in wsDormant.ListObjects("Table_Dormant_Stock").ListColumns("Days Last Sold").DataBodyRange
raCell = Replace(raCell, ".", "/")
Next
При этом оба решения по-прежнему неэффективны, если вы работаете с большим списком.
Более эффективное решение - создать временный рабочий столбец с помощью функции SUBSTITUTE:
With wsDormant.ListObjects("Table_Dormant_Stock").ListColumns.Add
.DataBodyRange.Formula = "=SUBSTITUTE([@[Days Last Sold]], ""."", ""/"")"
wsDormant.ListObjects("Table_Dormant_Stock").ListColumns("Days Last Sold").DataBodyRange.Value = .DataBodyRange.Value
.Delete
End With
Другое эффективное решение - скопировать все значения в массив, пройти через этот массив, а затем скопировать обновленные значения обратно в электронную таблицу:
Dim varArray As Variant, i As Integer
With wsDormant.ListObjects("Table_Dormant_Stock").ListColumns("Days Last Sold")
varArray = .DataBodyRange
For i = 1 To UBound(varArray, 1)
varArray(i, 1) = Replace(varArray(i, 1), ".", "/")
Next i
.DataBodyRange = varArray
End With