vba - 在 Visual Basic 中打开两个工作簿时,工作簿变量未正确分配

标签 vba excel

运行下面的代码时,根据打开的工作簿,我会得到不同的结果。该子项目位于与 Master Sheet.xlsm

关联的模块中
  1. 如果仅打开 Master Sheet.xlsm,则代码运行正确,即消息框显示(其中逗号分隔第一个和第二个消息框):Master Sheet,已传输案例 03 -09-18

  2. 如果Master Sheet.xlsm已转移案例 03-09-18.xlsx 均已打开,但已转移案例 03-09-18。 xlsx 第二次打开,然后消息框显示:已转移案件 03-09-18,已转移案件 03-09-18

  3. 如果Master Sheet.xlsm已转移案例 03-09-18.xlsx 均处于打开状态,但 Master Sheet.xlsm第二次打开,然后消息框显示:主表,主表

<小时/>
Sub foo()
    Dim x As Workbook
    Dim y As Workbook

   '## Open both workbooks first:
   Set x = Workbooks.Open("C:\Users\owner\Documents\ExelatecOutput\Master Sheet.xlsm")
   Set y = Workbooks.Open("C:\Users\owner\Documents\ExelatecOutput\transferred cases 03-09-18.xlsx")

   'Now, copy what you want from x:
   MsgBox x.Name
   MsgBox y.Name

End Sub

为什么变量 x 和 y 没有正确分配。

最佳答案

Workbooks.Open 始终返回最后打开的文件(即使它不是传入参数的文件)。在我看来,这要么是错误的文档,要么是 excel 中的错误。

您不需要检查文件是否已打开,因为打开已打开的文件不会引发错误,但您需要稍后设置变量:

Workbooks.Open "C:\Users\owner\Documents\ExelatecOutput\Master Sheet.xlsm": Set x = Workbooks("Master Sheet.xlsm") ' or Set x = ActiveWorkbook since Open will activate it
Workbooks.Open "C:\Users\owner\Documents\ExelatecOutput\transferred cases 03-09-18.xlsx": Set y = Workbooks("transferred cases 03-09-18.xlsx") ' or Set y = ActiveWorkbook since Open will activate it

关于vba - 在 Visual Basic 中打开两个工作簿时,工作簿变量未正确分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52168437/

相关文章:

excel - 从另一个文本框进行 Tab 键切换时将焦点设置在用户窗体文本框上

java - 如何使用 POI 处理旧的 excel .xls 文件?

excel - 如何防止因 DPI 变化而缩放?

vba - 对象Vba读取项目

excel - 在什么情况下我不能使用 SUMPRODUCT 代替 MMULT?

VBA 在每个循环中插入工作表名称

arrays - VBA计算数组的非空元素

python - 使用 XLWINGS 刷新数据透视表

excel - Excel中有没有类似于Ruby的Split方法的函数?

excel - Microsoft Excel LOOKUP 函数只是...不起作用?