VBA Dir 函数在 Excel 2010 上不起作用
Posted
技术标签:
【中文标题】VBA Dir 函数在 Excel 2010 上不起作用【英文标题】:VBA Dir function not working on Excel 2010 【发布时间】:2014-04-02 04:54:44 【问题描述】:我使用文件资源管理器映射了一个 Intranet 位置。即将http://intranet.XXXXXXX.com/mydir/ 映射到 M:\
我正在使用Dir
函数来测试该位置是否存在文件:
Dim FileExists as Boolean
FileExists = Dir("M:\myfile") <> ""
If FileExists Then MsgBox "File found in M:"
我在 Excel 2007 上运行该宏,它运行良好。但是,当我在 Excel 2010 上运行它时,Dir("M:\myfile")
总是返回“”,即使该文件存在于指定位置。我找不到适用于两个 Excel 版本的解决方案。有什么想法吗?
【问题讨论】:
请查看FileSystemObject。比愚蠢的dir
函数更直观
应该是Dir("M:\myfile\")
而不是Dir("M:\myfile")
@Qbik 的注释与文件无关,但对于使用 Dir() 函数列出目录中的文件很重要——在 Windows 上,您需要包含尾部反斜杠 (Application.PathSeparator
),甚至尽管在 Mac 上尾随正斜杠是可选的。
【参考方案1】:
这里是如何使用 FSO 做你想做的事:
Option Explicit
Function test_it()
'Test the Function - must pass the file path and name
Debug.Print Does_File_Exist("C:\temp\form1.txt")
End Function
Private Function Does_File_Exist(sFullPath) As Boolean
' Will return True or False if file exists.
' Provide the fully qualified path and file name.
' You can disable the MsgBox displays after testing
Dim oFs As New FileSystemObject
Dim oFile As File
Set oFs = New FileSystemObject
If oFs.FileExists(sFullPath) Then
Does_File_Exist = True
MsgBox "Found file: " & sFullPath
Else
Does_File_Exist = False
MsgBox "File not found: " & sFullPath
End If
Set oFs = Nothing
End Function
【讨论】:
我是 VBA for Excel 的新手。我将您的代码复制粘贴到 VBA 中,然后更改了路径。然后我创建了一个宏来调用该函数。我在第一行选项比较数据库(“预期文本或二进制”)上收到错误。在我看来,您的代码不适用于 Excel 的 VBA,是吗?【参考方案2】:我发现如果我使用完整的网络名称,它首先工作。这不仅仅是在 VBA 中,还有一些快捷方式 - 他们返回“找不到文件”。
从映射的快捷方式更改,例如
Y:\Projects\Proj1\File1.xlsx
到完整的映射路径,例如
\\server\Department\Projects\Proj1\File1.xlsx
解决了问题
【讨论】:
这不适用于 IP \\10.254.0.10\SomeDir 类型的映射服务器。不在互联网名称 \\server-name.com\SomeDir【参考方案3】:您可以在文件路径末尾添加文件扩展名作为通配符。我在 excel 2010 中进行了尝试,它对我有用。
Dim FileExists As Boolean
FileExists = Dir("D:\myfile" & "*.txt") <> ""
If FileExists Then MsgBox "File found in M:"
【讨论】:
谢谢桑托什。事实上,我有我要查找的文件的全名和扩展名,而不是“myfile”。我不在那个映射单元 M 上工作:= intranet.XXXX.com/mydir 忘了说原始宏适用于任何其他驱动器,例如 C:\ 甚至映射的网络单元。 @user3366899 您尝试访问的驱动器,是 citrix 环境吗?以上是关于VBA Dir 函数在 Excel 2010 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Excel VBA Application.Visible = false 在 Mac OSX 上不起作用
EXCEL2010 vba 循环打开某些文件夹下的excel文件