2016-10-13 3 views
0

В настоящее время я создаю короткий сценарий VBA, который берет таблицу из базы данных доступа и экспортирует ее в Excel с помощью метода «TransferSpreadSheet». Тем не менее, всякий раз, когда я делаю это я получаю «Run Time Error 3011», который гласит, что «ядро базы данных Microsoft Access не удалось найти объект„MonthsOutput“Microsoft Access не может найти объект таблицы

Ниже соответствующие форматы и кодовые секции:.

Public Sub Run() 

OutputFileName = CurrentProject.Path & "\Test5.xls" 
TableName = "MonthsOutput" 
Call SetExcel(OutputFileName, 1) 
Call ExportToExcel(OutputFileName, TableName) 
Call MoveData 

End Sub 

Public Function SetExcel(OutputFileName As String, SheetNumber As Integer) 
Set XL = CreateObject("Excel.Application") 
Set XLBook = GetObject(OutputFileName) 
Set XLSheet = XLBook.Worksheets(SheetNumber) 
Set XLSheet2 = XLBook.Worksheets(3) 

End Function 

Public Function ExportToExcel(OutputFileName As String, TableName As String) 

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, TableName, OutputFileName 


End Function 

Я смог решить эту ошибку из-за перезагрузки Access или создания другого файла Excel или создания другой таблицы доступа к источнику данных. Это будет работать в течение 1-2 сеансов, а затем я получу ошибку, не меняя ничего.

Кроме того, если я вхожу в таблицу «MonthsOutput» в режиме «Дизайн», VBA вернет ошибку, объект используется другим пользователем. Таким образом, это заставляет меня думать, что он знает, что таблица существует, она просто не может ее использовать.

Все хранится локально на моем компьютере, а файл Excel и база данных Access находятся в одних и тех же папках. Я запускаю Access 2013 и Excel 2013, но я использую расширения «.xls» для аргумента «acSpreadsheetTypeExcel12». Любая помощь будет оценена по достоинству.

Благодаря

ответ

1

Excel не требуется для экспорта, так что попробуйте это:

Public Sub Run() 

    OutputFileName = CurrentProject.Path & "\Test5.xls" 
    TableName = "MonthsOutput" 
    Call ExportToExcel(OutputFileName, TableName) 

End Sub 

Public Function ExportToExcel(OutputFileName As String, TableName As String) 

    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, TableName, OutputFileName 

End Function 

Кроме того, не используйте расширение XLSX.

+0

Спасибо за ответ! Оказывается, что, удалив ссылку на объект Excel, я уверен, что Excel не будет открыт. По какой-то причине, всякий раз, когда файл Excel открыт и выполняется попытка переноса данных, он возвращает ошибку 3011. Нечетный, но эх. Спасибо! –

+0

Спасибо за отзыв. Пожалуйста, отметьте как ответ, чтобы закрыть вопрос. – Gustav

Смежные вопросы