MS Access: откройте 2016 Excel и получите getObject - PullRequest
0 голосов
/ 08 ноября 2018

Я боролся с этой проблемой последние несколько часов и пробовал несколько решений, но безрезультатно. Я пытаюсь открыть отчет Excel 2016 (64-разрядный) в MS Access, по умолчанию Excel 2003 и должен оставаться таким же на данный момент. Мой код:

Dim xlTmp As excel.Application
Shell ("C:\Program Files\Microsoft Office\root\Office16\EXCEL.exe")
Set xlTmp = GetObject(, "Excel.Application")

Этот код делает именно то, что мне нужно, только когда я вхожу в режим отладки, потому что Excel не запускается полностью, пока не попытается захватить объект. При нормальном запуске выдает ошибку:

Ошибка времени выполнения '429' Компонент ActiveX не может создать объект

Я пробовал некоторые из следующих решений, но безрезультатно:

Function OpenExcel()
   x = Shell("C:\Program Files\Microsoft Office\root\Office16\EXCEL.exe", vbNormalFocus)
   OpenExcel = x
End Function

Function GetOpenExcel() As excel.Application
    Set GetOpenExcel = GetObject(, "Excel.Application.16")

TryAgain:
    On Error GoTo NoExcel
    Set xlTmp = GetObject(, "Excel.Application.16")
    On Error GoTo 0
    xlTmp.Visible = True
    Set GetOpenExcel = xlTmp
Exit Function

NoExcel:
    Resume TryAgain
End Function

А это

Set ie = Nothing
cnt = 0

cnt = xlTmp.Windows.count
sh = Shell("C:\Program Files\Microsoft Office\root\Office16\EXCEL.exe",     vbNormalFocus)
Do Until xlTmp.Windows.count = cnt + 1
Loop
Set xlTmp = GetObject("excel.Application.16")
Set sh = xlTmp.Windows(xlTmp.Windows.count - 1)

Я также попытался немного переключиться между ссылками, с небольшим замешательством, но вот что у меня есть на данный момент: MS Access References

Заранее спасибо, и любая помощь будет оценена.

1 Ответ

0 голосов
/ 08 ноября 2018

Просто используйте

Set xlTmp = CreateObject("Excel.Application")

вместо GetObject

UPDATE

Этот код работал для меня, у меня по умолчанию 2016, а не по умолчанию 2010:

Private Sub Command0_Click()
Dim xlTmp As Object
Shell "D:\Program Files (x86)\Microsoft Office 2010\Office14\EXCEL.EXE", vbNormalFocus

TryAgain:
    On Error GoTo NoExcel
    Set xlTmp = GetObject(, "Excel.Application")
    On Error GoTo 0
    'here I received correct xlTmp
Exit Sub

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