我遇到了最奇怪的问题。前几天我在笔记本电脑上编写了以下代码,并且运行良好。现在,我正在桌面上测试它,但它停止工作了。
首先,这是我的代码
Dim oApp As Application
Dim oWb As Workbook
Set oApp = New Application
oApp.Visible = True
Set oWb = oApp.Workbooks.Open(Filename:="C:\myFile.xlsx", ReadOnly:=True)
debug.print oWb.name
'returns "SOLVER.XLAM"
' "SOLVER.XLAM" is not "myFile.xlsx'
debug.print oApp.Workbooks.Count
'returns 1
debug.print oApp.Workbooks(1).name
'returns "myFile.xlsx"
现在,我知道求解器是一个插件,并且在创建它时将其加载到新应用程序中......但是它如何执行此切换?我仍然可以获得正确的文件,但我不想冒险碰巧我的应用程序对象中只有 1 个文件(或者第一个文件是我加载的文件)
其他信息
我正在从 Excel 实例中调用执行此宏,并且希望打开一个单独的 Excel 实例,然后在该另一个实例中打开特定的工作簿 ("C:\myFile.xlsx"
)。
我遇到的关键问题是,当我打开另一个实例,然后添加工作簿并将其设置为我的 oWb 变量时...不知何故,当我稍后调用该 oWb 变量时,它指的是与我不同的东西已将其设置为。
'This is how it makes me feel:
Dim x As Integer
x = 5
Debug.Print x
' 12
最佳答案
我认为,如果您稍微改进一下代码以确保您完全按照您想要的方式进行操作,那就没问题了。由于不清楚您是从 Excel 还是其他 MS Office 应用程序中调用代码,所以我将其放在下面的子目录中。
如果在 Excel 中运行,请运行它:
Option Explicit
Sub insideXL()
Dim oWb As Workbook
Set oWb = Workbooks.Open("C:\myFile.xlsx", ReadOnly:=True)
Debug.Print oWb.Name
Debug.Print Workbooks.Count
Debug.Print Workbooks(1).Name
oWb.Close false
Set oWb = Nothing
End Sub
如果在另一个程序中运行,请运行此命令。我使用早期绑定(bind),但如果您愿意,您也可以使用后期绑定(bind):
Sub outsideXL()
'make sure Microsoft Excel X.X Object Library is checked in Tools > References
Dim oApp As Excel.Application
Set oApp = New Excel.Application
Dim oWb As Excel.Workbook
Set oWb = oApp.Workbooks.Open("C:\myFile.xlsx", ReadOnly:=True)
oApp.Visible = True
Debug.Print oWb.Name
Debug.Print Workbooks.Count
Debug.Print Workbooks(1).Name
oWb.Close = True
Set oWb = Nothing
Set oApp = Nothing
End Sub
关于vba - Workbooks.Open 返回与文件名不同的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13019981/