当我使用 CopyFromRecordset 方法时,Excel 工作表将 E 列中的前 10 条记录作为日期,即使我将该列显式格式化为货币也是如此。 B 列也有同样的问题,但在我添加格式化代码后格式正确。
我知道我可以循环查看记录来解决这个问题,但是有人知道为什么会发生这种情况吗?我使用的 Excel 模板文件已将 B、C 和 E 列格式化为货币。那么,CopyFromRecordset 方法必须更改前 10 个单元格的设置,但随后它会忽略代码中的显式格式?
xlSheet.Range("A4").CopyFromRecordset rst
rst.Close
xlSheet.Range("B:C,E:E").NumberFormat = "$#,##0.00"
如果我把它改成这样,结果是一样的:
xlSheet.Range("A4").CopyFromRecordset rst
rst.Close
xlSheet.Range("B:C").NumberFormat = "$#,##0.00"
xlSheet.Range("E:E").NumberFormat = "$#,##0.00"
有趣的是,我认为问题出在新的工作簿上。 您提供的代码似乎仅创建一个新的空白工作簿。如果您要打开模板文件,则需要指定模板文件路径,如下所示。
Sub CopyDataFromRecordsetToExcel()
Dim xlApp As Object ' Excel.Application
Dim xlWorkbook As Object ' Excel.Workbook
Dim xlSheet As Object ' Excel.Worksheet
Dim TemplatePath As String
' Define the path to your personal template file
TemplatePath = ".....\yourTemp.xltx"
' Create a new Excel application and workbook
Set xlApp = CreateObject("Excel.Application")
' Open a new workbook based on the template
Set xlWorkbook = xlApp.Workbooks.Add(TemplatePath)
Set xlSheet = xlWorkbook.Worksheets(1)
xlApp.Visible = True
end Sub