【发布时间】:2019-12-27 20:21:48
【问题描述】:
我有一个 VBA 宏来打开三个工作簿(称为“file0.xlsm”、“file1.xlsm”和“file2.xlsm”)进行阅读和编辑。
问题在于打开这些文件中的第一个。每当我启动 Excel 并尝试运行宏时,VBA 都会显示错误:
“运行时错误 1004:
抱歉,我们找不到“file0.xlsm”。是否有可能被移动、重命名或删除?”
文件在目录中,并且名称正确。 (所有三个文件都与代码所在的工作簿位于同一目录中。)此外:如果我打开工作簿“file0.xlsm”,点击“另存为”,以相同的名称保存,关闭它,然后运行VBA 代码,错误不再出现。
无论 (1) 文件是保存为 .xlsx 还是 .xlsm 格式,(2) 文件名是硬编码的还是用户在电子表格中指定的,以及 (3) 中的顺序,都会出现错误我打开文件。
我尝试将数据从 file0 移动到新工作簿(通过一次将工作表从 file0 复制到新书一个),然后在我的代码中引用打开新书而不是 file0。错误仍然存在。
我还检查了文件名中的前导/尾随空格,并按照此页面上的步骤操作:https://github.com/OfficeDev/VBA-content/issues/637。
开书代码:
If Not IsWorkBookOpen(book1) Then
Workbooks.Open Filename:="file0.xlsm", UpdateLinks:=0, ReadOnly:=False, ignorereadonlyrecommended:=0, notify:=False, addtomru:=True
End If
If Not IsWorkBookOpen(book2) Then
Workbooks.Open Filename:="file1.xlsm", UpdateLinks:=0, ReadOnly:=False, ignorereadonlyrecommended:=0, notify:=False, addtomru:=True
End If
If Not IsWorkBookOpen(book3) Then
Workbooks.Open Filename:="file2.xlsm", UpdateLinks:=0, ReadOnly:=False, ignorereadonlyrecommended:=0, notify:=False, addtomru:=True
End If
注意:IsWorkBookOpen() 是一个检查一本书是否已经打开的函数。
IsWorkBookOpen() 的代码:
Function IsWorkBookOpen(Name As String) As Boolean
Dim xWb As Workbook
On Error Resume Next
Set xWb = Application.Workbooks.Item(Name)
IsWorkBookOpen = (Not xWb Is Nothing)
End Function
【问题讨论】:
-
所以它只有在你保存第一个文件后才找到另外两个文件?检查你的路径。
Msgbox CurDir() -
您是否建议如果三个工作簿与保存 VBA 代码的工作簿位于同一目录中,Excel 必须将该目录视为当前目录?我建议你使用他们的完整路径。类似
ThisWorkbook.Path & "\file0.xlsm"而不仅仅是"file0.xlsm"。只有在您将该工作簿保存在该位置后,Excel才会自动添加当前目录,恐怕...... -
@bluewayrafi 你的问题不是完全量化文件
path。function也不起作用,因为您不完全了解它是如何/做什么的。path应始终包含drive/folders等...而您的函数检查Workbooks.Itemid 建议阅读此内容以了解它正在寻找/检查的内容 -
你在时具体做了什么...在文件名字符串中指定路径...
-
@blue 指定路径失败是你的问题,句号。如果您尝试过但仍然失败,那么您做错了什么。 (例如,您是否将 \ 附加到路径?)