CopyFromRecordset错误地将单元格设置为日期格式?

时间:2018-12-26 22:10:47

标签: excel vba excel-vba date-formatting

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

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

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

我尝试过的事情:

  • 将格式从日期更改为数字,常规和文本。它会还原为CopyFromRecordset上的日期

  • 删除该列并制作一个新的格式为Number的数字。它仍然在CopyFromRecordset

  • 上恢复
  • 在选择语句中将数据类型转换为整数

还有其他想法吗?

一部分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列被格式化为日期。几天来,我一直在用力撞墙,所以任何想法都将不胜感激:)

2 个答案:

答案 0 :(得分:0)

一个单元格足以使Range以数字格式设置列的格式。

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

答案 1 :(得分:0)

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

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