Эта стратегия связывается с файлом 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» и затем запустит ваш sql в «ImportResults» !!