gpt4 book ai didi

excel - 为什么我不能设置工作簿变量,如果它已经打开 vba

转载 作者:行者123 更新时间:2023-12-04 21:28:16 25 4
gpt4 key购买 nike

我正在尝试在 Outlook 中编写宏。这个宏将在 Outlook 上做一些事情。而且还会修改现有的excel文档。
如果“Doc List.xlsm”已经打开,就会出现问题。如果是这样,"Set ExWbk = ExApp.Workbooks("C:\Doc List.xlsm")"不起作用。
但如果文档已关闭,则“Set ExWbk = ExApp.Workbooks.Open("C:\Doc List.xlsm")” 正在工作。换句话说,我可以更改 excel 文档。
我不明白“Set ExWbk = ExApp.Workbooks("C:\Doc List.xlsm")”有什么问题
更新:当我进行一些错误处理时,我得到以下消息:
错误 (9):下标超出范围。

...
Dim ExApp As Excel.Application
Dim ExWbk As Workbook
Dim ExSheet As Worksheet
....
Set ExApp = New Excel.Application
x = IsWorkBookOpen("C:\Doc List.xlsm")
If x = True Then
Set ExWbk = ExApp.Workbooks("C:\Doc List.xlsm")
Else
Set ExWbk = ExApp.Workbooks.Open("C:\Doc List.xlsm")
ExApp.Visible = True
End If
....

最佳答案

问题是总是打开一个新的 Excel 实例。和Doc List.xlsm永远不会在实例中打开(因为您刚刚在您的机器上启动了 Excel 实例 - 通过代码)。 Doc List.xlsm ,如果打开,将在现有的 Excel 实例中如此。
因此,您可以使用它来测试您的计算机上是否已经打开了 Excel 实例。

'initiate Excel object
On Error Resume Next
Set ExApp = GetObject(,"Excel.Application")
On Error GoTo 0
If ExApp Is Nothing Then Set ExApp = New Excel.Application
现在,我看不到你的 IsWorkbookOpen功能,但您必须检查工作簿是否在您刚刚启动的 Excel 实例中打开,因此请确保发生这种情况。
然后你的代码的其余部分变成
If x Then
Set ExWbk = ExApp.Workbooks("Doc List.xlsm") 'no need to include directory path
Else
Set ExWbk = ExApp.Workbooks.Open("C:\Doc List.xlsm")
ExApp.Visible = True
End If
最后一点,要明确的是,如果在代码为 Doc List.xlsm 时机器上打开了多个 Excel 实例,即使这也可能失败。文件在 GetObject 未拾取的另一个实例中打开引用。但我不会在这里讨论如何处理。

关于excel - 为什么我不能设置工作簿变量,如果它已经打开 vba,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64071533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com