将数据从另一个工作簿导入到用户窗体后出现下标超出范围错误

Subscript out of range error after importing data from another workbook to userform

提问人:szipet 提问时间:6/28/2022 最后编辑:szipet 更新时间:6/28/2022 访问量:88

问:

我有一个用户窗体,可以打开另一个工作簿来导入一些数据。之后关闭第二个工作簿,并

OpenBook.Close False

然后,我使用用户窗体中的按钮将此数据保存到第一个工作簿中。 一切都很完美。

但是,如果我在保存数据之前在 excel 中打开第二个工作簿,则通过单击保存按钮,我会得到“下标超出范围”错误。(在第一个工作簿中设置范围时,即。

Set list1 = Worksheets("Special name").Range("Special column")

似乎重点放在第二个工作簿上,没有这样的工作表。

如何将此焦点带回第一个工作簿?

我试过了

ThisWorkbook.Activate

没有运气。

谢谢!

编辑: 我使用此代码打开第二个工作簿:

FileToOpen = Application.GetOpenFilename(filefilter:="Excel Files (*.xls*),*xls*")
If FileToOpen <> False Then
    Set OpenBook = Application.Workbooks.Open(FileToOpen)
    Set tsh = OpenBook.Sheets(1)
Excel VBA 失焦

评论

0赞 Sam 6/28/2022
请添加您用于打开的代码。这就是一切的开始
3赞 FunThomas 6/28/2022
不要使用“激活”。告诉 VBA 您要使用哪个工作簿,例如 .Set list1 = ThisWorkbook.Worksheets("Special name").Range("Special column")
0赞 szipet 6/28/2022
#Sam:我把代码放在帖子里。 #FunThomas:是的,这有效,但我有很多这样的代码,用一个代码比用工作表更新每一行要好。
1赞 FunThomas 6/28/2022
您应该养成每次都准确指定要访问的内容的习惯。不要一直在路上使用。使代码缓慢且不可靠。为什么?想象一下,您使用 Activate,然后调用子例程。例程返回后:您能确定工作簿/工作表仍处于活动状态吗?也许子程序也使用 Activate?Activate
1赞 InjuredCoding 6/28/2022
为了扩展@FunThomas如果您在代码的顶部使用,则可以使用 然后,如果您需要更改工作表,则可以使用 WS2 或仅更改 WS 的分配,这使得代码更加健壮,运行和更新速度更快Set ws = ThisWorkbook.Worksheets("Special name")Set list1 = ws.Range("Special column")

答: 暂无答案