CopyFromRecordset 错误地将单元格格式设置为日期?
CopyFromRecordset incorrectly formats cells as Date?
我有一个 excel sheet 从数据库加载数据,然后使用 CopyFromRecordset VBA 命令将其放入 Excel Table。我的问题是,无论我做什么,许多单元格(应该是整数)一直被格式化为日期。我已将 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 列被格式化为日期。几天来我一直在为这个问题苦思冥想,所以 任何 的想法将不胜感激:)
一个单元格足以让 Range 以数字格式格式化该列。
DataRange = "a13"
With ActiveSheet.Range(DataRange)
With ActiveSheet.Range(DataRange).CurrentRegion
.ClearContents
.CurrentRegion.Columns("SO").NumberFormatLocal = "0_ "
End With
.CopyFromRecordset rs
End With
我以前遇到过这个问题;它可以通过使用单元格 属性 的范围来解决:
With ActiveSheet.Range(dataRange)
.ClearContents
.Cells(1,1).CopyFromRecordset rs
End With
我有一个 excel sheet 从数据库加载数据,然后使用 CopyFromRecordset VBA 命令将其放入 Excel Table。我的问题是,无论我做什么,许多单元格(应该是整数)一直被格式化为日期。我已将 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 列被格式化为日期。几天来我一直在为这个问题苦思冥想,所以 任何 的想法将不胜感激:)
一个单元格足以让 Range 以数字格式格式化该列。
DataRange = "a13"
With ActiveSheet.Range(DataRange)
With ActiveSheet.Range(DataRange).CurrentRegion
.ClearContents
.CurrentRegion.Columns("SO").NumberFormatLocal = "0_ "
End With
.CopyFromRecordset rs
End With
我以前遇到过这个问题;它可以通过使用单元格 属性 的范围来解决:
With ActiveSheet.Range(dataRange)
.ClearContents
.Cells(1,1).CopyFromRecordset rs
End With