vba - Workbooks.Open 返回与文件名不同的文件

标签 vba excel excel-2010

我遇到了最奇怪的问题。前几天我在笔记本电脑上编写了以下代码,并且运行良好。现在,我正在桌面上测试它,但它停止工作了。

首先,这是我的代码

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/

相关文章:

excel - 使用 Excel 发送 Outlook session 邀请

vba - Excel VBA - 根据列标题查找最后一个非空行

excel - VBA:如何将不同工作表上的两个范围合并为一个,循环

excel - 阻止 Excel 计算单元格内容?

excel - Outlook 从新到旧的前 50 封电子邮件

python - 从 Excel 宏更新我的 wiki

java - 使用 apache 元模型更新 excel 文件

java - HashMap 插入空值而不是字符串?

vba - 将字符串值内的下划线字符替换为空格

vba - 是否可以让输入框需要 5 位数字?