#excel #vba #date
#excel #vba #Дата
Вопрос:
Это, вероятно, довольно просто, но я погуглил и не могу найти ответ. Я также только изучаю VBA (я сделал VB.NET и т.д. и т.п.)
Если ячейка, которую пытается скопировать макрос, является датой, я просто копирую число, например 40352 от 23/06/2010
Вот фрагмент кода, любая помощь наиболее ценна, спасибо:
Sheet5.Range(Cells(rwStartNumber, currentColumn 1).Address(False, False)) =
Sheet5.Range(Cells(rwStartNumber, currentColumn).Address(False, False))
Очевидно, что это выполняется в двух циклах, но проблема не в этом.
Спасибо!
Ответ №1:
Вы можете попробовать следующее
With Selection
.PasteSpecial xlPasteValuesAndNumberFormats
End With
Дайте мне знать, если у вас это работает,
С уважением,
Ответ №2:
Вы увидите число, потому что это , как Excel хранит даты: вы должны изменить формат вашей целевой ячейки для даты , и он будет отображаться правильно.
Комментарии:
1. У меня было подозрение, что это было что-то подобное. Есть ли способ скопировать форматирование вместе с данными ячейки? У меня был поиск и Range().Select, а затем выделение. Копирование, выделение. Метод вставки выдает ошибки приложения или что-то в этом роде (и я даже не уверен, что это все равно скопирует форматирование)
2. @Thomas King Взгляните на специальный метод PasteSpecial с помощью xlPasteFormats msdn.microsoft.com/en-us/library/aa195818(office.11).aspx
Ответ №3:
Вы можете скопировать свойство NumberFormat из исходной ячейки, например:
'Following line copies the values...'
ws.Cells(curRow, curCol 1) = ws.Cells(curRow, curCol)
'And this copies the formats...'
ws.Cells(curRow, curCol 1).NumberFormat = ws.Cells(curRow, curCol).NumberFormat
(ws — это переменная типа Worksheet, вы можете назначить ее, например, так:
Dim ws as Worksheet
Set ws = Worksheets("Sheet5")
или вы можете просто использовать ActiveSheet)