“运行时错误'9':下标超出范围”通知,即使所有工作簿/工作表均已正确定义

时间:2019-11-27 10:37:16

标签: excel vba

在此先感谢您提供的任何帮助或建议,这是一个简短的故事:

我想使用VBA在新的excel实例中打开工作簿,然后将范围从另一个(已打开)工作簿的几个不同工作表中复制到新打开的工作簿中的指定范围。

这是我到目前为止所拥有的:

Dim wbl As Workbook
Set wbl = Workbooks("exports  - 27thNov.xlsm")
Dim wsl As Worksheet
Set wsl = Sheets("odbd")
Dim lrl As Long
lrl = wsl.Range("A" & Rows.Count).End(xlUp).Row

Dim wbl2 As Workbook
Set wbl2 = Workbooks("pltemplate.xlsx")
Dim wsl2 As Worksheet
Set wsl2 = wbl2.Sheets("S")

wbl.Worksheets("odbd").Range("A2:AK" & lrl).Copy
wbl2.Activate
wsl2.Range("A4").Select
wsl2.Range("A4").PasteSpecial Paste:=xlPasteValues

请注意:已添加“激活并选择”命令,以尝试以某种方式强制宏工作。

此外,我更改了目标工作簿的名称(“ pltemplate.xlsx”)以使其更简单地包含文本字符串以及源工作表的名称(“ S”),但是我仍然尝试运行宏时会得到相同的运行时错误消息。

编辑:抛出错误的行是:

Set wbl2 = Workbooks("pltemplate.xlsx")

1 个答案:

答案 0 :(得分:0)

上次OP评论后,解决方案是在同一Excel实例中打开两个工作簿。

目标工作簿(pltemplate)已经打开,在上面的代码之前有一些代码可以打开新的excel实例

然后,您将无法在不同的Excel实例中打开的工作簿之间进行任何操作。每个VBA宏都在自己的实例上运行,因此您唯一的解决方案是在excel的同一实例中打开两个工作簿:

Set wbl2 = Workbooks("pltemplate.xlsx")执行此行时,必须已在同一Excel实例中打开工作簿pltemplate.xlsx

如果未打开工作簿,则必须使用:

Set wbl2 = Workbooks.Open("pathtofile/pltemplate.xlsx")

有关Excel实例的更多信息和/或相关信息:

How to reference a workbook from another excel instance

Running Multiple Instances of Excel simultaneously from VBA?

Can having multiple instances of Excel open cause VBA issues?