Ник, я думаю, я нашел решение для вас :)
Позвольте мне продемонстрировать, используя мои данные выборки.
По умолчанию Excel не имеет формата ячейки DateTime
. Это означает, что он не может хранить дату и время в одной ячейке. Когда дело доходит до представления данных, кажется, что Excel пытается использовать только самый узнаваемый формат - дату. Он по-прежнему сохраняет время, но форматирует ячейки в формат даты, теряя/, отбрасывая время.
Посмотрите на скриншот ниже:
Как вы можете видеть данные, отображаемые в ячейке выглядит так же, как обычный день. Но если вы посмотрите на панель формул - время существует, но не отображается.
В конце кода, я добавил Debug.Print
линию:
Debug.print Range("B6").Value & vbCrlf & Range("B6").Value2
результаты я получил
25/06/2013 16:00:27
41450.6669791667
Поэтому я сообразуйтесь, что , что вы видите в ячейка в Excel не совсем то, к чему она относится,
The ne Шаг xt заключался в том, чтобы написать функцию, которая будет перебирать ячейки и изменять форматирование и то, что видно.
Чтобы достичь обоих:
date
и
time
в одной ячейке, я решил отформатировать ячейку как
Text
.
Private Sub FormatDateAndTime(ByRef sheet As Worksheet, start As Long, column As String)
Dim i As Long, rng As Range
For i = start To sheet.Range(column & Rows.Count).End(xlUp).Row
Set rng = sheet.Range(column & i)
Dim str As String
str = Split(rng.Value, " ")(0) & " " & Split(rng.Value, " ")(1)
rng.NumberFormat = "@"
rng = str
Set rng = Nothing
Next i
End Sub
FormatDateAndTime()
функция принимает 3 параметра:
- активный лист
- начиная ряд
- столбец с датами
Для вызова функции добавьте эту строку прямо перед End Sub
в коде
// Copy Data to Excel
theSheet.Range("A6").CopyFromRecordset objMyRecordset
// this is the line you want to add
FormatDateAndTime sheet:=theSheet, start:=6, column:="A"
End Sub
примечание:меня отправить другие параметры в моем образце demontrate результатов, но выше будут работать в вашем случае
Ok, после выполнения кода Вы должны получить результаты следующего
примечания:Я провел это только для столбца B
в своем примере, чтобы показать разницу.
примечание: Я побежал этот для обеих колонн B
и C
Ваше полное решение:
Sub Populate_Sheet(theSheet As Worksheet)
'Declare variables'
Dim objMyConn As ADODB.Connection
Dim objMyCmd As ADODB.Command
Dim objMyRecordset As ADODB.Recordset
Set objMyConn = New ADODB.Connection
Set objMyCmd = New ADODB.Command
Set objMyRecordset = New ADODB.Recordset
Dim executeThisSQLStatement As String
'Dim target As Worksheet
'Set target = theSheet
executeThisSQLStatement = "SELECT CAST(DateHour_CPT AS TIMESTAMP) FROM EnergyData_v"
'Open Connection'
objMyConn.ConnectionString = "driver={SQLServer};Data Source=DataMart;User ID=acctname.value;Password=mypass.value;"
objMyConn.Open
'Set and Excecute SQL Command'
Set objMyCmd.ActiveConnection = objMyConn
objMyCmd.CommandText = executeThisSQLStatement
objMyCmd.CommandType = adCmdText
'Open Recordset'
Set objMyRecordset.Source = objMyCmd
objMyRecordset.Open
'Copy Data to Excel'
Range("A6").CopyFromRecordset objMyRecordset
FormatDateAndTime sheet:=theSheet, start:=6, column:="A"
End Sub
Private Sub FormatDateAndTime(ByRef sheet As Worksheet, start As Long, column As String)
Dim i As Long, rng As Range
For i = start To sheet.Range(column & Rows.Count).End(xlUp).Row
Set rng = sheet.Range(column & i)
Dim str As String
str = Split(rng.Value, " ")(0) & " " & Split(rng.Value, " ")(1)
rng.NumberFormat = "@"
rng = str
Set rng = Nothing
Next i
End Sub
Если этот ответ помог вам, пожалуйста, примите и/или повысьте его! :) Спасибо и удачи
Возможно, вы имели в виду DATETIME, а не TIMESTAMP? SQL Server сделал большую ошибку, когда они назвали тип TIMESTAMP - в то время как он * звучит *, как тип ANSI SQL, который представляет что-то, что связано с датой и временем, и это не имеет ничего общего. Попробуйте это в окне запроса, игнорируя все эти помехи VBA и Excel: 'SELECT CAST (GETDATE() AS TIMESTAMP);' –
Кроме того, вам никогда не придется говорить «Я не знаю, какую версию я запускаю», - это тривиально, чтобы получить с помощью 'SELECT @@ VERSION;'. –
Вероятно, это проблема с форматированием Excel. Попробуйте изменить формат столбцов столбцов даты на «yyyy-mm-dd hh: mm: ss» – Vasanth