VBA读取文本文件:权限被拒绝

时间:2016-07-20 09:51:03

标签: excel vba excel-vba

我有一个包含文本文件的文件夹。案文如下:

NAME   Number   Mail  Date
xx      1       zz    //

我想编写一个vba代码来读取所有文本文件并搜索信息" NAME"用" name"替换它,然后保存修改。 我做了下面的代码,但我在error 70 permission denied中有Set f = FSO.OpenTextFile(Fichier, forWriting, True)

你可以帮帮我吗?

Sub Sample()
     dim fso=createobject("scripting.filesystemObject") 
     dim f
     dim path as string
     dim file_txt as string

      path= "C:\Users\Folder\Fileshere\"
      file_txt= Dir(path & "*.*")

    Do While Len(file_txt) > 0
      'Set objfile = FSO.CreateTextFile(path & file_txt)
      Set f = FSO.OpenTextFile(file_txt, ForReading)
      While Not f.AtEndOfStream
      Namechange = f.ReadAll
      Wend
      Namechange = Replace(Namechange , "NAME", "name")
      Set f = FSO.OpenTextFile(file_txt, forWriting, True)
      f.Write Namechange 

    file_txt=dir()
    loop
end sub

2 个答案:

答案 0 :(得分:1)

我会使用更多FileSystemObject功能重写,而不是亲自使用Dir(),但这是您自己选择的。我认为您遇到的关键问题是您已打开文件进行读取,然后在TextStream对象仍在内存中并锁定文件时立即尝试打开它进行写入。这就是为什么你得到“权限被拒绝”。引用TechNet Article

  

打开文本文件

     

使用文本文件分为三个步骤。   在您可以执行任何其他操作之前,您必须打开文本文件。这个可以   可以通过打开现有文件或创建新文本来完成   文件。 (当您创建新文件时,该文件会自动打开   并准备好使用。)任何一种方法都会返回一个引用   TextStream对象。在您引用TextStream之后   对象,您可以读取或写入文件。但是,你   不能同时读取和写入同一个文件。其他   单词,你不能打开文件,读取内容,然后写   文件的附加数据,全部在同一操作中。相反,你   必须读取内容,关闭文件,然后重新打开并写入   其他数据。当您打开现有文本文件时,该文件可以是   开放阅读或写作。创建新文本时   文件,该文件仅供写入,如果没有其他原因   没有内容可读。最后,你应该总是关闭一个   文本文件。虽然这不是必需的(文件通常是   一旦脚本终止就关闭),这是很好的编程   实践。

我的代码应该符合您的要求。我已从中间删除了While循环,就好像您使用的是ReadAll,然后您不需要遍历文本。

Sub MySub()
    Dim fso
    Set fso = CreateObject("scripting.filesystemObject")
    Dim file, folder
    Dim path As String
    Dim file_txt As String
    path = "C:\users\folders\fileshere\"
    Set folder = fso.GetFolder(path)

    For Each file In folder.Files
        Set file = fso.OpenTextFile(file.Path, 1)
        Namechange = file.ReadAll
        file.Close
        Namechange = Replace(Namechange, "NAME", "name")
        Set file = fso.OpenTextFile(file.Path, 2, True)
        file.Write Namechange
        file.Close
    Next
End Sub

如果您有任何困难或希望进一步解释上述内容,请与我联系。

答案 1 :(得分:0)

一些小的改变,它对我有用。请在以下代码中根据您自己的要求更改路径:

Sub change_txt()
Dim fso As Object
Set fso = CreateObject("scripting.filesystemObject")
Dim f
Dim path As String
Dim file_txt As String

path = "D:\Folder\Fileshare\"
file_txt = Dir(path & "*.*")

Do While Len(file_txt) > 0
    'Set objfile = FSO.CreateTextFile(path & file_txt)
    Set f = fso.opentextfile(path & file_txt, 1)

    While Not f.AtEndOfStream
        Namechange = f.ReadAll
    Wend
    Namechange = Replace(Namechange, "NAME", "name")
    Set f = fso.opentextfile(path & file_txt, 2)
    f.Write Namechange

    file_txt = Dir()
Loop
End Sub