我正在开发一个模块来自动将Excel工作表导入Access表。导入的工作表的设计是相同的。使用DoCmd.TransferSpreadsheets很好地导入列A-O(文本和数字数据的混合),但是P-AD列的值有问题...
列P和Q表示开始和结束里程表值,R表示经过的距离。例如,在工作表上,车辆OHS-11报告为从154952开始,结束于155636,经过的距离为684.导入的记录显示为开始和结束于155636,经过的距离为0。
专栏S-AA根本就拒绝进口。 AB列为所有记录导入0,包括具有合法值的记录(即非空)。 AC-AD列偶尔会导入0,但许多记录都是空白的。见下图:
我试着无济于事:
在没有创建传输错误表的情况下导入成功但但是忽略/交换值是很奇怪的。如果重要,E-P,R和AB-AD列中的单元格是公式。
我在Windows 10平板电脑系统上使用Excel 2016和Access 2016。这是代码:
Option Compare Database
Sub Import_New_WS()
'--- Import new worksheets to temporary table
Dim dbAC As Database
Dim rsList, rsMonth, rsXfer As Recordset
Dim strDestPath, strFilePath, strMFRSheetNo, strRange As String
Set dbAC = CurrentDb()
Set rsList = dbAC.OpenRecordset("SELECT * FROM [XFER_LIST_ONLY_LATEST_MFR]")
Set rsMonth = dbAC.OpenRecordset("SELECT * FROM [FP_MO_CAL_MO]")
'Set rsXfer = dbAC.OpenRecordset("SELECT * FROM [XFER_WS]")
If rsList.EOF = True Then Exit Sub 'Checks that there are worksheets to process
'--- Delete existing records from MFR consolidation table
'DoCmd.SetWarnings False
'DoCmd.RunSQL "DELETE * FROM [XFER_WS];"
'DoCmd.SetWarnings True
'--- Import worksheets into consolidation table
rsList.MoveFirst
strMFRSheetNo = Right(CStr(rsList.Fields("MFR_LAST_FP")), 2)
Do Until rsList.EOF
rsMonth.FindFirst "FISCAL_MO = " & strMFRSheetNo
strRange = rsMonth.Fields("WS_NAME") & "!A2:AD" & Format(rsList.Fields("NO_ROWS") + 1, "0")
strFilePath = rsList.Fields("FILE_PATH")
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "XFER_WS", strFilePath, False, strRange
strDestPath = "I:\Dept\DCS\MPOOL\Fleet Management Data\MFR\MFR FY " & Mid(CStr(rsList.Fields("MFR_LAST_FP")), 3, 2) & _
"\" & Mid(strFilePath, 81, Len(strFilePath))
Debug.Print strDestPath
'FileCopy strFilePath, strDestPath
'Kill strFilePath
rsList.MoveNext
Loop
Set dbAC = Nothing
Set rsList = Nothing
Set rsXfer = Nothing
Set rsMonth = Nothing
DeleteImportErrorTables
End Sub
答案 0 :(得分:0)
经过大量研究和测试多种策略来解决这个问题,我只是回到我的原始代码,并以某种方式自发地开始正常工作。然而,第二天又恢复了原来的异常行为!
通过将工作表保存为逗号分隔值(.csv)文件并使用DoCmd.TransferText,无法找到解决问题的方法。这种策略绕过了Access'数据类型猜测并快速将数据导入表中。 (另外,DoCmd.TransferText并不喜欢文件名中包含多个句点的文件名。)