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文件

Excel \ OpenOffice Calc Dir 函数不会遍历文件

VBA批量合并表格

Excel VBA 对象构造函数和析构函数

从 Access 2010 VBA 打开 Excel 2010 文件