У меня есть программа MS Access Database, которая приносит данные из рабочей книги MS Excel (это только один лист), которая затем обрабатывается и выдает заполненную форму для пользователь.Импорт листа MS Excel в MS Access через VBA, не импортируя все
Все это работало нормально, но когда они столкнулись с ошибкой в отчете, я пошел работать с программой базы данных, чтобы найти проблему, и появился новый. MS Access импортирует только ячейки A1 и A2.
Когда я пытаюсь вручную импортировать файл Excel и присоединяюсь к таблице, мастер импорта показывает только те две ячейки, которые включены в файл. Так или иначе, MS Access не видит весь лист данных.
Я попытался вручную изменить параметр acSpreadsheetType в DoCmd.TransferSpreadsheet, и он работал один раз. Я также попытался изменить его программно без эффекта (т. Е. Я все еще получаю только ячейки 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, и у меня был hardcoded acSpreadsheetType как «acSpreadsheetTypeExcel12XML», и когда я изменил это на «acSpreadsheetTypeExcel9», он работал правильно один раз.
Что мне не хватает?
Для записи я также попытался сделать .recalc и .requery для всей формы после выполнения импорта, и это также было неудачно.
Любая помощь, которую вы, ребята, можете бросить мне дорогу, будет очень благодарна!
Я думаю, что интересно, что вы написали, что «вручную импортировать файл Excel» также только импортное A1 и A2. Забудьте получить код для работы на данный момент и попробуйте вручную импортировать книгу, чтобы делать то, что вы ожидаете! Я бы попытался сохранить файл excel в различных форматах excel. Я бы попытался воссоздать НОВЫЙ файл excel, которому вы можете доверять, так или иначе не «поврежденный». Это приведет к большему количеству света о том, что происходит неправильно. Я бы попробовал импортировать xl fiel, который не работает с доступом, установленным на другом ПК. Хорошая идея? – HarveyFrench