我在名为“Payroll_Cleanup”的工作簿中编写了一个宏来清理/格式化名为“Payroll”的文件。
我有宏文件和要清理的文件在同一个文件夹中。
宏在我的电脑上运行良好。
但是,将我在另一个用户桌面上拥有的相同文件夹以便他们可以运行该文件时,他们会收到"Subscript out of Range"
错误消息。
VBA 调试器突出显示这一行
Set wb1 = Workbooks("Payroll_Cleanup") 'out of range error
Run Code Online (Sandbox Code Playgroud)
记住,这是已经打开的文件
所以我把那行代码改成
Set wb1 = ActiveWorkbook
Run Code Online (Sandbox Code Playgroud)
太好了,所以现在继续。
现在它给了我另一个"Subscript out of Range"
错误:
Workbooks.Open ("Payroll.xlsb") 'file to be cleaned that is in the same folder.
Run Code Online (Sandbox Code Playgroud)
这稍后设置为 Set wb2 = Workbooks("Payroll")
既然我不能只做另"ActiveWorkbook"
一条线,我还能做什么?我错过了什么?我检查了信任中心宏设置,它们完全匹配。
小智 5
在文件资源管理器(查看、显示/隐藏、显示文件扩展名)中有一个设置(不管你信不信)显示或隐藏文件扩展名的显示列表中的文件名。
当它打开(显示扩展名)时,它会产生一个不幸的副作用,即强制 VBA 的打开工作簿集合包含工作簿名称的文件扩展名。
当文件资源管理器的显示文件扩展名打开时,
'this will show Subscript out of Range error.
Set wb1 = Workbooks("Payroll_Cleanup")
'this will not
Set wb1 = Workbooks("Payroll_Cleanup.xlsb")
Run Code Online (Sandbox Code Playgroud)
似乎“其他用户的计算机”已打开该选项。
您还可以通过组合随后的两行代码来避免一些麻烦。
set wb2 = Workbooks.Open ("Payroll.xlsb") '<~~ needs full path
'maybe better as,
set wb2 = Workbooks.Open (wb1.path & "\" & "Payroll.xlsb")
Run Code Online (Sandbox Code Playgroud)