В VBA Excel, когда я копирую одну ячейку в другую, если это дата, она не копируется, что мне делать?

#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)