【问题标题】:CopyFromRecordset incorrectly formats cells as Date?CopyFromRecordset 错误地将单元格格式设置为日期?
【发布时间】:2020-01-08 19:10:12
【问题描述】:

我有一个 Excel 表,它从数据库加载数据,然后使用 CopyFromRecordset VBA 命令将其放入 Excel 表中。我的问题是,无论我做什么,许多单元格(应该是整数)都会被格式化为日期。我已将 Excel 中的数字格式更改为数字,但每当我从数据库中重新加载数据时,格式就会切换回日期。

数据库中的数据类型是整数,但是,当我从数据库中加载数据时,Excel 仍然将单元格格式更改为日期。即使最终用户在加载数据后在单元格中输入整数,excel 也会将其更改为日期。例如,如果我在单元格中输入 5,excel 会将其更改为 1/5/1900。

为什么 Excel 会继续将这些单元格更改为日期,即使在格式下拉列表更改为其他内容之后?

我尝试过的事情:

  • 将格式从日期更改为数字、常规和文本。它恢复为 CopyFromRecordset 上的日期

  • 删除列并创建一个格式化为数字的新列。它仍然在 CopyFromRecordset 上恢复

  • 在 select 语句中将数据类型转换为整数

还有其他想法吗?

从数据库加载数据的 VBA 代码的一部分:

SQLStr = "Select ......, [SO] FROM v_TRACKING"
Set Cn = New ADODB.Connection
Cn.Open "Driver={SQL Server Native Client 11.0};Server=" & Server_Name & ";Database=" & Database_Name & ";Trusted_connection=yes;"
rs.Open SQLStr, Cn, adOpenStatic

dataRange = "a13:az" & (rs.RecordCount + 12)

With ActiveSheet.Range(dataRange)
    .ClearContents
    .CopyFromRecordset rs
End With

所有其他列的格式保持正确,但由于某种原因,SO 列被格式化为日期。几天来,我一直在为此苦苦思索,所以任何想法将不胜感激:)

【问题讨论】:

    标签: excel vba date-formatting


    【解决方案1】:

    我以前遇到过这个问题;它可以通过使用 Range 的 Cells 属性来解决:

    With ActiveSheet.Range(dataRange)
        .ClearContents
        .Cells(1,1).CopyFromRecordset rs
    End With
    

    【讨论】:

    • 这成功了!这很棒,因为它仍然允许我清除范围的内容。我没有意识到一个单元格可以作为范围。再次感谢!
    【解决方案2】:

    一个单元格足以让 Range 将列格式化为数字格式。

    DataRange = "a13"
    With ActiveSheet.Range(DataRange)
        With ActiveSheet.Range(DataRange).CurrentRegion
            .ClearContents
            .CurrentRegion.Columns("SO").NumberFormatLocal = "0_ "
        End With
        .CopyFromRecordset rs
    End With
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多