我有一个简单的代码,它在初始化用户窗体时运行,该用户窗体设置了一些工作簿和工作表变量,因此它们可以在我的其余模块中轻松使用,如果文件移动,可以在一个地方轻松更改引用。我最近将我的工作簿从桌面迁移到单独的服务器/驱动器,并相应地更新了文件路径;但是,当我尝试运行代码时,我立即收到消息:
“运行时错误”-2147352565(8002000b)':无法将焦点移动到控件,因为它不可见,未启用或者不接受焦点的类型。“
此行发生错误
Set ReportWkbk = Workbooks("N:\ rest of file pathway here\QuaRT_Template.xlsm")
导致此问题的服务器/驱动器上是否有任何可能发生的事情?如果是这样,我有什么办法可以解决它吗?我使用保存在同一位置的其他excel工作簿,似乎没有被引用的问题,尽管它们的引用是在工作簿本身,而不是通过Visual Basic。
答案 0 :(得分:0)
发生Subscript Out of Range
错误是因为正在引用的Excel工作簿未在相同的 Excel实例中打开(或打开)。您可以通过创建两个工作簿(名称为一个WorkBook2.xlsx)并确保它们在单独的Excel实例中打开来轻松地重现错误。然后运行以下代码:
Sub OpenWkbkNames()
Dim wbk As Workbook
For Each wbk In Workbooks
Debug.Print wbk.Name
Next
'Hmm. Workbook 2 is not listed, but lets activate it and see what happens.
Workbooks("workbook2.xlsx").Activate
End Sub
您可以通过循环浏览Excel的 THIS 实例中打开的工作簿的名称来避免此问题,以确保其可用。
我一直在研究Run-time error '-2147352565 (8002000b)'
,并发现了这一点:https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.vsconstants.disp_e_badindex.aspx
显然,这也是VS Subscript Out of Range
的说法。我怀疑(但没有确凿的证据),因为代码在本地工作,但问题出现在文件迁移到共享驱动器后,Windows需要很长时间才能打开文件,因此在新的Excel实例中打开它。从本质上讲,Excel会变得不耐烦,并决定在Windows完成其任务时继续前进。我将此假设基于添加到Excel 2013(https://blogs.office.com/2013/06/03/opening-workbooks-by-running-separate-instances-of-excel/)的检测逻辑。