无法将 CopyFromRecordset 结果设置为日期或数字
Can't set CopyFromRecordset results to Date or Number
我正在尝试使用 Range.CopyFromRecordset
将数据集从 Access 2010 导入 Excel。查询中的某些字段的某些值已转换为日期或数字,例如:
iif(isdate([Install Date]),cdate([Install Date]),[Install Date])
AS [Install Date (cast)],
iif(isnumeric([Feature Number]),cdbl([Feature Number]),[Feature Number])
AS [Feature Number (cast)]
这是我用来生成包含此数据的工作表的代码:
Private Sub createRSSheet(db As DAO.Database, rsName As String, sheetName As String)
Dim rs As DAO.Recordset
Dim sht As Worksheet
Dim fldCtr As Long
Dim columnRng As Range
'get recordset
Set rs = db.OpenRecordset(rsName)
'add worksheet
Set sht = bk.Sheets.Add
sht.Name = sheetName
'import recordset to worksheet
sht.Range("a2").CopyFromRecordset rs
'iterate through fields
For fldCtr = 0 To rs.Fields.Count - 1
sht.Cells(1, fldCtr + 1) = rs.Fields(fldCtr).Name
'check if field is a date field
If InStr(UCase(rs.Fields(fldCtr).Name), "DATE") > 0 Then
'format column as date
Set columnRng = sht.Cells(1, fldCtr + 1)
columnRng.EntireColumn.NumberFormat = "mm/dd/yyyy"
'check if field is number cast
ElseIf InStr(UCase(rs.Fields(fldCtr).Name), "(CAST)") > 0 Then
'format column as number
Set columnRng = sht.Cells(1, fldCtr + 1)
columnRng.EntireColumn.NumberFormat = 0
End If
Next
End Sub
但是,当此子程序运行时,数字列仍全部格式化为文本,日期列仍被视为字符串——当我应用自动筛选器时,筛选器列出每个单独的日期,而不是将它们分组月份和年份。
如何让这些列以所需的格式结束?
已解决:
'check if field is a date field
If InStr(UCase(rs.Fields(fldCtr).Name), "DATE") > 0 Then
'format column as date
Set columnRng = sht.Cells(1, fldCtr + 1)
columnRng.EntireColumn.NumberFormat = "mm/dd/yyyy"
'refresh column values with new formatting
columnrng.EntireColumn.Value=columnrng.EntireColumn.Value
'check if field is number cast
ElseIf InStr(UCase(rs.Fields(fldCtr).Name), "(CAST)") > 0 Then
'format column as number
Set columnRng = sht.Cells(1, fldCtr + 1)
columnRng.EntireColumn.NumberFormat = 0
'refresh column values with new formatting
columnrng.EntireColumn.Value=columnrng.EntireColumn.Value
End If
我正在尝试使用 Range.CopyFromRecordset
将数据集从 Access 2010 导入 Excel。查询中的某些字段的某些值已转换为日期或数字,例如:
iif(isdate([Install Date]),cdate([Install Date]),[Install Date])
AS [Install Date (cast)],
iif(isnumeric([Feature Number]),cdbl([Feature Number]),[Feature Number])
AS [Feature Number (cast)]
这是我用来生成包含此数据的工作表的代码:
Private Sub createRSSheet(db As DAO.Database, rsName As String, sheetName As String)
Dim rs As DAO.Recordset
Dim sht As Worksheet
Dim fldCtr As Long
Dim columnRng As Range
'get recordset
Set rs = db.OpenRecordset(rsName)
'add worksheet
Set sht = bk.Sheets.Add
sht.Name = sheetName
'import recordset to worksheet
sht.Range("a2").CopyFromRecordset rs
'iterate through fields
For fldCtr = 0 To rs.Fields.Count - 1
sht.Cells(1, fldCtr + 1) = rs.Fields(fldCtr).Name
'check if field is a date field
If InStr(UCase(rs.Fields(fldCtr).Name), "DATE") > 0 Then
'format column as date
Set columnRng = sht.Cells(1, fldCtr + 1)
columnRng.EntireColumn.NumberFormat = "mm/dd/yyyy"
'check if field is number cast
ElseIf InStr(UCase(rs.Fields(fldCtr).Name), "(CAST)") > 0 Then
'format column as number
Set columnRng = sht.Cells(1, fldCtr + 1)
columnRng.EntireColumn.NumberFormat = 0
End If
Next
End Sub
但是,当此子程序运行时,数字列仍全部格式化为文本,日期列仍被视为字符串——当我应用自动筛选器时,筛选器列出每个单独的日期,而不是将它们分组月份和年份。
如何让这些列以所需的格式结束?
已解决:
'check if field is a date field
If InStr(UCase(rs.Fields(fldCtr).Name), "DATE") > 0 Then
'format column as date
Set columnRng = sht.Cells(1, fldCtr + 1)
columnRng.EntireColumn.NumberFormat = "mm/dd/yyyy"
'refresh column values with new formatting
columnrng.EntireColumn.Value=columnrng.EntireColumn.Value
'check if field is number cast
ElseIf InStr(UCase(rs.Fields(fldCtr).Name), "(CAST)") > 0 Then
'format column as number
Set columnRng = sht.Cells(1, fldCtr + 1)
columnRng.EntireColumn.NumberFormat = 0
'refresh column values with new formatting
columnrng.EntireColumn.Value=columnrng.EntireColumn.Value
End If