希望有人知道如何做到这一点,我对VBA不太好。
我的机器上安装了Excel 2016(64位)和Excel 2010(32位)。这是因为我有一些旧的基于excel的工具,只能在2010年运行。 其中一个工具包含以下代码:
Start:
ThisWorkbook.Activate
strOutputsFilePath = gStrOutputsPath
strDMfilename = [DMFilePath]
'2. Refresh the PowerPivot model with the new data
'Create a new instance of excel
Application.StatusBar = "Opening a new instance of MS Excel"
Set appExcelApp = New Excel.Application
'Disconnect and Re-connect to the PowerPivot Add-in (in case it has been disconnected)
For Each comAddin In appExcelApp.COMAddIns
If comAddin.Description = "PowerPivot for Excel" Then
Set comAddinPPVT = comAddin
End If
Next
If Not comAddinPPVT Is Nothing Then
comAddinPPVT.Connect = False
comAddinPPVT.Connect = True
End If
'Apply the settings for the Excel application
With appExcelApp
.Visible = False
.ScreenUpdating = False
.DisplayAlerts = False
.EnableEvents = False
End With
应用程序应该执行的是运行Excel 2010的新实例并在其中打开某些文件。 但是,安装2016后,新Excel.Application 命令默认打开Excel 2016而不是2010.由于数据模型之间不兼容,这会导致PowerPivot插件出错。
问题是:有没有办法在VBA代码中指定我想要一个Excel 2010实例?
尝试在我的系统上默认使用Excel 2010,但代码仍会打开2016并出错:\
非常感谢任何帮助!
由于
答案 0 :(得分:0)
没有简单的解决方法。不建议或不支持在一台计算机上使用两种不同版本和两种不同的Excel版本的Excel。这很不寻常,所以没有开箱即用的解决方案。
我的建议是,如果您不希望Excel 2016(64位)干扰您的Excel 2013(32位)内容,请不要在同一台计算机上安装这两个版本。
考虑使用虚拟机(VM)运行一个版本并将另一个版本保留在主机上。这将确保他们不会干涉。
答案 1 :(得分:0)
如何使用Shell
功能?
Private Sub OpenExcelInstance(version as string)
Dim path As String
Dim appInstance As Variant
Select Case version
Case "Excel 2010"
path = "C:\Program Files (x86)\blablabla\Excel.exe" 'path to 32bit 2010 executable
Case "Excel 2016"
path = "C:\Program Files\blablabla\Excel.exe" 'path to 64 bit 2016 executable.
Case default
Exit sub
End Select
appInstance = Shell(path, 1)
'GetObject function here.
End Sub
但是,您无法对此appInstance
进行编码 - 它是shell命令返回的整数。
之后可以使用GetObject
从中获取Application实例,但是我没有深入研究,因为我遇到了记录here的问题并且有一个SO问题{{ 3}}(不是真的没有答案)。