Excel VBA для преобразования числового значения в формат времени - PullRequest
2 голосов
/ 25 января 2012

В рабочую книгу скопированы две колонки из базы данных Access.

Я хочу убедиться, что данные отформатированы правильно, поэтому я добавил этот код:

'DateTime Column
Sheets("Sheet1").Columns("A:A").Select
Selection.NumberFormat = "m/d/yyyy hh:mm"

'Time Column
Sheets("Sheet1").Columns("B:B").Select
Selection.NumberFormat = "hh:mm"

Столбец даты и времени форматируется правильно.
Столбец времени первоначально копируется как числовой эквивалент (т. Е. 0.595277777777778) вместо значения времени (14:17).

Запуск макрокода не влияет на визуальное отображение, и только когда я нажму F2 и введу в ячейку соответствующий формат.

Есть ли способ (за исключением цикла), чтобы заставить Excel применить форматирование?

Ответы [ 3 ]

3 голосов
/ 25 января 2012

Вы можете использовать VBA для достижения того же эффекта, что и ответ Стива Гомера, установив для него свойство значения диапазона:

Dim r As Range
Set r = Sheets("Sheet1").Columns("B:B")
r.Value = r.Value
2 голосов
/ 25 января 2012

Если вы копируете столбец и вставляете в качестве значений (при необходимости, через макрос), то Excel должен заново интерпретировать тип данных, и вышеописанное должно работать правильно.

0 голосов
/ 17 июня 2019

Вы можете сделать это без объявления TMP как ДАТА:

TMP = CDate(Range("A1").Value) ' we suppose A1 value is 12:45:00
TMP = "" & TMP ' convert to char
TMP = Left(TMP, 5) ' extract the first 5 char
MsgBox TMP ' for displaying 12:45
...