MS Access:打开2016 Excel和getObject

问题描述 投票:0回答:1

在过去的几个小时里,我一直在努力解决这个问题,并尝试了多种解决方案无济于事。我正在尝试在MS Access中打开excel 2016(64位)报告,默认的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

在此先感谢,任何帮助将不胜感激。

excel vba ms-access
1个回答
0
投票

只是用

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
© www.soinside.com 2019 - 2024. All rights reserved.