【问题标题】:How Dir() works in VBADir() 如何在 VBA 中工作
【发布时间】:2016-05-09 13:39:26
【问题描述】:

在我当前的 VBA 代码中,我生成了一个名为 myFileName 的变量,并希望在检查文件是否存在时将其用作参数,但在我使用 Dir 命令的行。

有趣的是,如果我手动键入 Dir 命令的文件路径而不是使用 myFileName 变量,那么它可以正常工作。 (没有错字,我可以使用 myFileName 读取或写入文件,它只会丢弃 Dir 命令的错误)

有什么想法可以让 Dir(myFileName) 工作吗?

    Set fs = CreateObject("Scripting.FileSystemObject")

    myFileName = Environ("USERPROFILE") & "\Application Data\myFile.txt"

    If Dir(myFileName) = "" Then
        Set a = fs.CreateTextFile(myFileName, True)
        a.Write ("0")
        a.Close
    End If

【问题讨论】:

  • myFileName 声明为字符串吗?
  • 尝试使用 FSO 中的 .fileexists,因为您有一个来创建文本文件/

标签: excel vba file


【解决方案1】:

\Application Data 不是文件夹,而是快捷方式。请改用LOCALAPPDATAAPPDATA

myFileName = Environ("LOCALAPPDATA") & "\myFile.txt"
myFileName = Environ("APPDATA") & "\myFile.txt"

【讨论】:

    【解决方案2】:

    你的问题是:

    myFileName = Environ("USERPROFILE") & "\Application Data\myFile.txt"
    

    应该是

    myFileName = Environ("USERPROFILE") & "\Application Data" & "\" & "myFile" & ".txt"
    

    这是一个常见问题,值得承认的是,您必须像这样插入最后一个正斜杠。 IDK为什么vba读起来像这样,但这是解决方法

    我刚刚运行它没有任何问题,并且文件已创建。

    Private Sub createafile()
        Set fs = CreateObject("Scripting.FileSystemObject")
    
        myFileName = Environ("USERPROFILE") & "\Desktop" & "\" & Format(Date, "ddmmyyyy") & ".xlsm"
    
        If Dir(myFileName) = "" Then
            Set a = fs.CreateTextFile(myFileName, True)
            a.Write ("0")
            a.Close
        End If
    End Sub
    

    【讨论】:

    • 我从来没有像这样插入最后一个反斜杠。你能提供一个例子的链接吗?
    • 更改为您的建议会使 Dir(myFileName) 返回一个空字符串,即使文件存在,然后我收到 CreteTextFile 的“运行时错误 76,找不到路径”错误消息行
    • 我还编辑了我的原始评论并添加了一个额外的&符号
    • @lturner 我已经为人们多次回答过这个问题,这似乎是问题所在。我只是普遍理解你需要这样做。如果不这样做,我从来没有让 DIR() 函数工作。
    猜你喜欢
    • 2016-05-04
    • 2019-08-04
    • 2022-08-16
    • 2013-01-19
    • 2012-04-20
    • 2018-01-07
    • 2014-04-02
    • 2017-09-19
    • 2014-02-25
    相关资源
    最近更新 更多