Проблема с импортом данных MS Access. Ограничение в 65000 строк, несмотря на использование функций и файлов не из Excel 2003 - PullRequest
0 голосов
/ 26 апреля 2019

Я создаю базу данных MS Access для анализа оперативных данных на своем рабочем месте.Для этого я автоматически импортирую данные из листов Excel с помощью функции «DoCmd.TransferSpreadsheet», а затем преобразую их с помощью SQL.

Это работает хорошо, за исключением одного конкретного случая: когда лист Excel содержит большечем 65 тыс. строк.Я знаю, что это ограничение Excel 2003, но я не могу сказать, откуда оно.

Я уже читал подобные вопросы на разных форумах, но то, что им помогло, уже было включено в мой случай:

  • Я использую параметр "acSpreadsheetTypeExcell12"
  • Файл Excel, из которого я читаю, является .xlsx
  • Я использую библиотеку объектов Microsoft Excel 16.0
  • Версия файла MS Access: .accb (2007-2016)

Я использую следующую функцию:

Sub ImportExcelData(filePath As String, fileName As String)
    ' Creating and initializing variables
    Dim file As String
    Dim tempTable As String
    Dim appEx As Excel.Application
    Dim wb As Excel.workBook
    Set appEx = CreateObject("Excel.Application")
    Set wb = appEx.Workbooks.Open(file)
    appEx.Visible = True

    file = filePath + fileName


   ' reading in Data from sheets within workbook
   For Each ws In wb.Worksheets
    If ws.Visible = True Then
        ws.Activate
        tableName = ws.Name
        With ws
            lastRow = Columns("A").Find("*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows, LookIn:=xlValues).Row
            'MsgBox lastRow
        End With
        'MsgBox lastRow
        On Error Resume Next

        DoCmd.DeleteObject acTable, tempTable

        If Err.Number = 2008 Then

            MsgBox "Die Tabelle kann nicht gelöscht und neu erstellt werden, da diese geöffnet ist."

        End If


        On Error GoTo 0

        sAdress = tableName & "!A1:Z" & lastRow
        DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, tableName, filePath & fileName, True, sAdress 'function that thros error


      End If
    Next



    ' close everything
    wb.Close SaveChanges:=False

    Set appEx = Nothing
    Set wb = Nothing


End Sub

Как я уже сказал, я получаю ошибку времени выполнения 3011 "Модуль банка данных Microsoft Access не смог найти объект Sheet_name $ Range"(в переводе с немецкого).Я хотел бы, чтобы данные импортировались так же, как если бы их было менее 65 тыс. Строк.

Я действительно не знаю, что это может быть;Большое спасибо за вашу помощь!

1 Ответ

0 голосов
/ 26 апреля 2019

Я бы лучше создал макрос, который импортирует этот файл, и посмотрю, каков будет результат.Или даже попытайтесь импортировать файл вручную, не должно быть никаких ограничений для импорта файлов XLSX в ACCDB.Проверьте, все ли в порядке?

Другое замечание, что вы вызываете «старую» библиотеку с таким синтаксисом:

Set appEx = CreateObject("Excel.Application")

Использование:

Set appEx = CreateObject("Excel.Application.16")

Илиизменить определение

Dim appEx As New Excel.Application

Таким образом, проблема в том, что: несмотря на включение ссылки на 16-ую версию, когда вы вызываете метод CreateObject, он предоставляет вам версию библиотеки без соответствия ссылкам, а старый объект библиотекисоздано

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...