Я создаю базу данных 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 тыс. Строк.
Я действительно не знаю, что это может быть;Большое спасибо за вашу помощь!