【问题标题】:ADODB Excel Database - Date Format IssueADODB Excel 数据库 - 日期格式问题
【发布时间】:2015-07-19 00:00:39
【问题描述】:

我目前正在使用下面的脚本从另一个 Excel 工作簿中检索数据。我以正确的格式检索正确的日期。当我正在查询的工作簿是“OPEN”时,会出现问题,检索到的数据“DATE”返回一个数字“49802”(类似的东西)但是一旦我关闭我正在查询的工作簿,返回的“DATE”变得正常格式。

Sub Pull_Data_from_Excel_with_ADODB()

Dim cnStr As String
Dim rs As ADODB.Recordset
Dim query As String
Dim var1
Dim var2
var1 = Now() - 1
var2 = Now()
Dim fileName As String
fileName = "C:\Signin-Database\DATABASE\Signin-Database.xlsm"

cnStr = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
       "Data Source=" & fileName & ";" & _
       "Extended Properties=Excel 12.0"


query = "SELECT * FROM [Sheet1$D:H] WHERE [Time_in] < '" & var2 & "' AND [Time_in] >  '" & var1 & "' AND [Time_out] is null"

Set rs = New ADODB.Recordset
rs.Open query, cnStr, adOpenUnspecified, adLockUnspecified

Cells.Clear
Range("A2").CopyFromRecordset rs

Dim Cell As Range, i As Long
With Range("A1").CurrentRegion
For i = 0 To rs.Fields.Count - 1
    .Cells(1, i + 1).Value = rs.Fields(i).Name
Next i
.EntireColumn.AutoFit





End With

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    尝试关闭您的记录集,看看是否“使”日期更改为应有的日期。

    自动调整命令后

    .EntireColumn.AutoFit
    rs.Close
    Set rs = Nothing
    

    如果这不起作用,请尝试格式化具有日期的列。

    ws.Range("A:A").NumberFormat = "yyyy-mm-dd"
    ws.Range("E:E").NumberFormat = "yyyy-mm-dd"
    

    如果你有一个标题行并且你不想格式化你可以在你的范围内定义开始行和结束行

    Dim lRow as Long
    lRow = ws.UsedRange.Rows.count
    
    ws.Range("A2:A" & lRow).NumberFormat = "yyyy-mm-dd"
    ws.Range("E2:E" & lRow).NumberFormat = "yyyy-mm-dd"
    

    【讨论】:

      【解决方案2】:

      Excel 将其日期值存储为数字 - 整数部分是从 1900 年 1 月开始计数的天数,小数部分是小时数。例如,49802.25 将是 2036 年 5 月 7 日早上 6 点。因此,问题可能是由于 .CopyFromRecordSet 方法可能损坏的单元格格式。我在一些工作簿中也遇到过这个问题,如果它从 Sql 中提取日期字段,则会影响其他工作表上的单元格格式。

      Excel table loses number formats when data is copied from ADODB recordset

      https://dutchgemini.wordpress.com/2011/04/21/two-serious-flaws-with-excels-copyfromrecordset-method/ (这个缺陷#2)

      对我有用的一种解决方法是让您的宏将受影响的单元格格式化回正确的格式,这可以使用 .NumberFormat 方法完成。

      What are .NumberFormat Options In Excel VBA?

      【讨论】:

        猜你喜欢
        • 2017-02-27
        • 2013-02-08
        • 2021-12-23
        • 2016-08-03
        • 2011-12-12
        • 1970-01-01
        • 2016-08-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多