2015-09-30 4 views
1

У меня есть программа 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 для всей формы после выполнения импорта, и это также было неудачно.

Любая помощь, которую вы, ребята, можете бросить мне дорогу, будет очень благодарна!

+0

Я думаю, что интересно, что вы написали, что «вручную импортировать файл Excel» также только импортное A1 и A2. Забудьте получить код для работы на данный момент и попробуйте вручную импортировать книгу, чтобы делать то, что вы ожидаете! Я бы попытался сохранить файл excel в различных форматах excel. Я бы попытался воссоздать НОВЫЙ файл excel, которому вы можете доверять, так или иначе не «поврежденный». Это приведет к большему количеству света о том, что происходит неправильно. Я бы попробовал импортировать xl fiel, который не работает с доступом, установленным на другом ПК. Хорошая идея? – HarveyFrench

ответ

0
"DELETE tbl_Work_Plan_Item_Import.*, * " & _ 

У этого есть * дважды.

Изменения в

"DELETE tbl_Work_Plan_Item_Import.* " & _ 
Смежные вопросы