【发布时间】:2018-09-27 23:12:09
【问题描述】:
我正在开发一个自动将 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,但许多记录是空白的。见下图:
我试过没用:
- 在 Access 中设置字段类型
- 让 Access 从头开始创建表
- DoCmd.RunSavedImport 并不理想,因为源电子表格具有不同的名称
- SELECT * INTO 将为每个工作表创建一个新表,我需要将所有电子表格中的数据合并到一个表中
在没有创建传输错误表的情况下导入成功但值被忽略/交换是很奇怪的。如果有关系,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
【问题讨论】:
-
不知道这是否与您的问题有关,但
Dim rsList, rsMonth, rsXfer As Recordset只有rsXfer是Recordset;其他一切都是Variant。你想要的是Dim rsList as Recordset, rsMonth as Recordset, ... -
@xidgel:这表明你可以教老狗新把戏。唉,这并没有影响问题,但是错误地声明变量是没有意义的。谢谢。
标签: excel vba ms-access import