Windows Excel VBA打开文件错误1004,前缀为~$&引用;
我正在编写一些VBA来优化Excel 2013中的工作流,我正在使用Windows 10计算机。 我使用一个简单的递归过程遍历文件结构,查找文件名中的特定内容,如下所示:Windows Excel VBA打开文件错误1004,前缀为~$&引用;,windows,excel,file,filesystems,vba,Windows,Excel,File,Filesystems,Vba,我正在编写一些VBA来优化Excel 2013中的工作流,我正在使用Windows 10计算机。 我使用一个简单的递归过程遍历文件结构,查找文件名中的特定内容,如下所示: Function filePathToList(fileStart As String, firstString As String, secondString As String) As String Dim FileSystem As Object Dim HostFolder As String HostFolder
Function filePathToList(fileStart As String, firstString As String, secondString As String) As String
Dim FileSystem As Object
Dim HostFolder As String
HostFolder = fileStart
Set FileSystem = CreateObject("Scripting.FileSystemObject")
filePathToList = DoFolder(FileSystem.GetFolder(HostFolder), LCase(firstString), LCase(secondString))
End Function
Function DoFolder(Folder, firstString As String, secondString As String) As String
Dim SubFolder
For Each SubFolder In Folder.SubFolders
DoFolder = DoFolder(SubFolder, firstString, secondString)
Next
Dim File
For Each File In Folder.Files
If (InStr(1, LCase(File.name), firstString) > 0) And (InStr(1, LCase(File.name), secondString) > 0) Then
DoFolder = Folder.Path & "\" & File.name
Debug.Print DoFolder
Debug.Print File.name
Debug.Print File
Exit Function
End If
Next
End Function
我已经进行了一些调试,以了解发生了什么,我将被删除,但VBA决定将“~$”作为前缀添加到我找到的文件中:
X:\05_Sputnik\T\Pony\_New_building_YYYYpp_\~$Komplettlista_Mamma mu.xlsx
~$Komplettlista_Mamma mu.xlsx
X:\05_Sputnik\T\Pony\_New_building_YYYYpp_\~$Komplettlista_Mamma mu.xlsx
在我看来,完整的路径是:
X:\05\u Sputnik\T\Pony\u New\u building\u YYYYpp\uKomplettlista\u Mamma mu.xlsx
VBA同意我的观点,因为它抱怨在试图打开它时找不到它
我可以通过提取子字符串来解决这个问题,但在我看来,它不是很整洁。但我的问题是,
为什么会发生这种情况?
我找到的文件正是预期的位置,并且没有类似名称的隐藏文件。Windows是在捉弄我吗?如果您想忽略隐藏文件(例如打开文档时Office应用程序生成的锁定文件),最好修改您的行
If (InStr(1, LCase(File.name), firstString) > 0) And (InStr(1, LCase(File.name), secondString) > 0) Then
还要测试文件是否未隐藏,例如
If (InStr(1, LCase(File.name), firstString) > 0) And _
(InStr(1, LCase(File.name), secondString) > 0) And _
Not (File.Attributes And vbHidden) Then
~$
文件只是在您打开工作簿(或其他人打开工作簿)时创建的临时锁定文件。当工作簿关闭时,它们应该再次被删除,但有时如果Excel崩溃或类似情况,它们会保留下来。(注意:临时文件只是虚拟文件,或者它们可能包含打开文件的用户ID,但它们不是Excel工作簿-因此其中一个打开将失败。)好的,所以我在迭代文件夹中的每个文件时会使用它。文件Windows正在临时为该文件创建锁吗?因此,当在文件名的其余部分中找到匹配项时,返回的名称为。否-仅当文件当前在Excel中打开(例如宏所在的文件)或以前在Excel中打开但未正确关闭时,才会创建锁定文件。您的代码只是在目录中的文件上进行迭代,而没有实际打开文件-因此您应该只看到与在Windows资源管理器中查看文件夹时相同的文件(假设启用了“显示隐藏文件”)。