我有一个MS Access数据库程序,它从MS Excel工作簿(它只有一张)中引入数据,然后处理该数据并为用户提供完整的表单。
整个过程工作正常,但是当他们在报告中遇到错误时,我开始使用数据库程序来查找问题并重新出现问题。 MS Access仅导入单元格A1和A2。
当我尝试手动导入Excel文件并附加到表格时,导入向导仅显示这两个单元格包含在文件中。不知何故,MS Access没有看到整张数据。
我尝试在DoCmd.TransferSpreadsheet中手动更改acSpreadsheetType选项,它只运行一次。我也试过以编程方式更改它没有任何效果(即,我仍然只获得单元格A1和A2)。
以下是处理该计划这一部分的VBA部分:
Dim acSpreadsheetType As Integer
strFile2Import = txtFindFile
acSpreadsheetType = ExcelVersion(strFile2Import)
DoCmd.Hourglass (HourglassOn)
DoCmd.SetWarnings (WarningsOff)
DoCmd.RunSQL _
"DELETE tbl_Work_Plan_Item_Import.*, * " & _
"FROM tbl_Work_Plan_Item_Import;"
DoCmd.TransferSpreadsheet _
acImport, acSpreadsheetType, "tbl_Work_Plan_Item_Import", strFile2Import, True
这是“ExcelVersion”功能:
Public Function ExcelVersion(ByVal strFile2Import As String)
'https://msdn.microsoft.com/en-us/library/office/ff840717.aspx
'https://msdn.microsoft.com/en-us/library/office/ff198017.aspx
Set objapp = CreateObject("Excel.Application")
objapp.Visible = True
Set wb = objapp.workbooks.Open(strFile2Import, True, False)
ExcelVersion = wb.FileFormat
wb.Close
objapp.Quit
Set objapp = Nothing
Select Case ExcelVersion
Case 29 'xlExcel3 (Excel3)
ExcelVersion = 0 'acSpreadsheetTypeExcel3 (Microsoft Excel 3.0 format)
Case 33 'xlExcel4 (Excel4)
ExcelVersion = 6 'acSpreadsheetTypeExcel4 (Microsoft Excel 4.0 format)
Case 39 'xlExcel5 (Excel5)
'xlExcel7 (Excel7)
ExcelVersion = 5 'acSpreadsheetTypeExcel5 (Microsoft Excel 5.0 format)
'acSpreadsheetTypeExcel7 (Microsoft Excel 95 format)
Case 46 'xlXMLSpreadsheet (XML Spreadsheet)
ExcelVersion = 10 'acSpreadsheetTypeExcel12Xml (Microsoft Excel 2010 XML format)
Case 50, 51 'xlExcel12 (Excel12)
'xlWorkbookDefault (Workbook Default)
ExcelVersion = 9 'acSpreadsheetTypeExcel12 (Microsoft Excel 2010 format)
Case 56 'xlExcel8 (Excel8)
ExcelVersion = 8 'acSpreadsheetTypeExcel8 (Microsoft Excel 97 format)
'acSpreadsheetTypeExcel9 (Microsoft Excel 2000 format)
End Select
End Function
“strFile2Import”和“txtFindFile”是从“文件”对话框中获取的文件名和要导入的完整路径。
我的原始程序没有ExcelVersion函数,我将acSpreadsheetType硬编码为“acSpreadsheetTypeExcel12XML”,当我将其更改为“acSpreadsheetTypeExcel9”时,它只能正常工作一次。
我错过了什么?
为了记录,我还尝试在执行导入后对整个表单执行.recalc和.requery,这也是不成功的。
任何帮助你们的人都会非常感激!
答案 0 :(得分:0)
"DELETE tbl_Work_Plan_Item_Import.*, * " & _
这有*两次。
更改为
"DELETE tbl_Work_Plan_Item_Import.* " & _