此策略链接到 excel 文件,而不是直接导入它,然后从中选择数据并将任何需要它的字段转换为正确的数据类型。
Sub ImportFromExcel()
Dim pathToFile As String
Dim targetTableName As String
Dim sql As String
pathToFile = "C:\Path\To\File.xlsx"
targetTableName = "ImportResults"
'//create the link
DoCmd.TransferSpreadsheet acLink, _
acSpreadsheetTypeExcel12, _
targetTableName, _
pathToFile, _
True '//This part only if the excel file has field headers
'//import
sql = "SELECT Field1Name, CStr(CustNumber) AS CustNumber, Field3Name INTO NewImportTable FROM " & targetTableName
CurrentDb.Execute sql
'//remove the link
DoCmd.DeleteObject acTable, targetTableName
End Sub
***此代码的两个陷阱要注意:
1) 在运行此代码之前,您应该删除任何名为“NewImportTable”的表,否则您将收到“表已存在”错误。
2)如果在Sub删除链接之前发生任何错误,下次运行时会出现问题,因为它将创建一个名为“ImportResults1”的链接,因为“ImportResults”仍然存在。真正可怕的是这里不会抛出任何错误。它将创建“ImportResults1”,然后在“ImportResults”上运行您的 sql!