无法将CopyFromRecordset结果设置为date或数字

我试图使用Range.CopyFromRecordset从Access 2010导入到Excel数据集。 在查询中有一些字段中的某些值已被转换为date或数字,例如:

 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 

但是,当这个子运行时,数字列仍被格式化为文本,并且date列仍被视为string – 当我应用自动筛选器时,筛选器将列出每个单独的date,而不是按月份和年份对它们进行分组。

我怎样才能得到这些列以期望的格式?

解决了:

 '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