Вот решение для вашего кода как .
Я настоятельно рекомендую прочитать и понять Как избежать Выберите в Excel VBA , чтобы улучшить свой код и снизить риск ошибок во время выполнения.
Если вы добавите этот код в конец вашей существующей процедуры (как показано в вашем вопросе), он пропустит oop через каждую ячейку и переформатирует его в правильное значение даты.
Dim myCell As Variant
Dim myRange As Range
Set myRange = Selection
For Each myCell In myRange
myCell.Value = Format(CDate(myCell), "DD/MM/YYYY")
Next
. Вам может также пригодиться эта ссылка:
Лучший способ найти последнюю использованную строку
Если вы уточните свой код с учетом информация в обеих ссылках, вы в конечном итоге полностью избегаете .Select
и Selection.
, и ваш целевой диапазон / ячейка будет менее двусмысленным.
Я переформатировал бы его следующим образом:
Примечание: Я написал это на Sheet1
новой рабочей книги, вам понадобится изменить ссылку Sheets("...")
в соответствии с именем вашего листа.
Sub dates()
Dim myRange As Range
Dim LastRow As Long
Dim myCell As Range
With ThisWorkbook.Sheets("Sheet1")
LastRow = .Cells(.Rows.Count, 7).End(xlUp).Row
Set myRange = Range("G12:G" & LastRow)
For Each myCell In myRange
myCell.Value = Replace(myCell, ".", "/")
myCell.Value = Format(CDate(myCell), "DD/MM/YYYY")
Next myCell
End With
End Sub
Теперь стало намного понятнее, где в нашей книге мы вносим изменения, которые помогают улучшить читаемость для вас и других (таких как другие пользователи на SO), а также уменьшает двусмысленность и риск ошибок RunTime
.