为什么ADODB.RecordSet中的整数在写入Excel电子表格时会转换为日期

为什么ADODB.RecordSet中的整数在写入Excel电子表格时会转换为日期,excel,vba,Excel,Vba,我正在使用Excel 2010 我使用VBA从MySQL数据库填充ADODB.RecordSet,然后将记录集的结果写入工作表中的一系列单元格。工作表中的所有单元格都使用“常规”格式 记录集中有两个整型字段 在写入工作表时,如果我只包含起始单元格(如下面的代码所示),则一切都会按预期工作,并且所有整数值都会正确写入工作表 从数据库读取并写入工作表的代码如下: SqlString = "SELECT * FROM ......" Set Connection = New ADODB.Connec

我正在使用Excel 2010

我使用VBA从MySQL数据库填充
ADODB.RecordSet
,然后将记录集的结果写入工作表中的一系列单元格。工作表中的所有单元格都使用“常规”格式

记录集中有两个整型字段

在写入工作表时,如果我只包含起始单元格(如下面的代码所示),则一切都会按预期工作,并且所有整数值都会正确写入工作表

从数据库读取并写入工作表的代码如下:

SqlString = "SELECT * FROM ......"

Set Connection = New ADODB.Connection
Connection.Open ConnectionString

Set Recordset = New ADODB.Recordset
With Recordset
    .CursorLocation = adUseClient
    .CursorType = adOpenForwardOnly
    .LockType = adLockBatchOptimistic
    .Open SQLString, Connection
    .ActiveConnection = Nothing
End With

With Sheet11
    .Range("AD33:AM47").Clear
    .Range("AD33").CopyFromRecordset Recordset
End With
但是,如果在将记录集写入工作表时包含完整范围,则包含整数值的单元格格式将转换为日期,即使我在宏中专门设置了单元格格式。 本例中的代码为:

[...]
With Sheet11
    .Range("AD33:AM47").Clear
    .Range("AG33:AG47").NumberFormat = "General"
    .Range("AI33:AI47").NumberFormat = "General"
    .Range("AD33:AM47").CopyFromRecordset Recordset
End With
这导致日期为'01/01/1900'+实际整数显示在工作表的单元格中,我希望在其中看到整数

例如:

  • 整数=10
  • 格式化单元格包含
    10/01/1900

是什么原因导致了这种重新格式化?

我不知道这会解决问题,但在删除记录之前,请尝试将格式设置为“@”,而不是常规格式。我在excel中做了很多ADODB工作,但我只看到它将记录作为文本输入,所以我在这里不知所措。谢谢您的输入,但恐怕没有什么乐趣。到目前为止,这些单元格仍在重新格式化。很有趣。我建议您在打开“本地人”窗口的情况下运行此命令,并逐步查看哪一行正在更改格式类型。另外,如果你知道你在用数字,出于好奇,为什么要用“一般”呢?