我在一个名为“ Payroll_Cleanup”的工作簿中编写了一个宏,以清理/格式化一个名为“ Payroll”的文件。
我将宏文件和要清除的文件放在同一文件夹中。
该宏在 我的计算机 上正常工作。
但是,将我拥有的同一文件夹放置在另一个用户桌面上以便他们可以运行文件时,他们会收到"Subscript out of Range"
错误。
VBA调试器突出显示此行
Set wb1 = Workbooks("Payroll_Cleanup") 'out of range error
请记住,这是 已打开
的文件所以我将代码行更改为
Set wb1 = ActiveWorkbook
太好了,所以现在继续进行。
现在,它又给了我一个"Subscript out of Range"
错误:
Workbooks.Open ("Payroll.xlsb") 'file to be cleaned that is in the same folder.
稍后将其设置为Set wb2 = Workbooks("Payroll")
由于我不能只做另一行"ActiveWorkbook"
,所以我还能做什么?我想念什么?我检查了信任中心的宏设置,它们完全匹配。
答案 0 :(得分:3)
文件资源管理器中有一个设置(查看,显示/隐藏,显示文件扩展名),(信不信由你)显示或隐藏列表中带有文件名的文件扩展名。
启用此选项(显示扩展名)时,它具有强制VBA的打开的Workbooks集合包含文件扩展名和工作簿名称的不利作用。
打开文件资源管理器的“显示文件扩展名”时,
'this will show Subscript out of Range error.
Set wb1 = Workbooks("Payroll_Cleanup")
'this will not
Set wb1 = Workbooks("Payroll_Cleanup.xlsb")
似乎“另一位用户的计算机”已启用该选项。
您还可以通过合并后面的两个代码行来节省自己的痛苦。
set wb2 = Workbooks.Open ("Payroll.xlsb") '<~~ needs full path
'maybe better as,
set wb2 = Workbooks.Open (wb1.path & "\" & "Payroll.xlsb")