2016-07-20 13 views
0

私はテキストファイルを含むフォルダを持っています。 「名前」に置き換えると、その後の変更を保存するために「NAME」VBAテキストファイルを読む:許可が拒否されました

NAME Number Mail Date 
xx  1  zz // 

と私はすべてのテキストファイルを読み込むVBAコードを書いて、情報を検索したい:テキストは、以下のように提示されます。 私は以下のコードを実行しましたが、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 

答えて

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 
1

私はFileSystemObject機能のより多くのビットを使用してではなく、個人的にDir()を使って書き換えると思いますが、それはあなた自身の選択にオープンです。あなたが持っていると思う重要な問題は、あなたが読み込みのためにファイルを開いた後に、TextStreamオブジェクトがまだメモリに残っていて、ファイルをロックしている間にすぐに書き込みを開こうとしたことです。これが「許可が拒否されました」という理由です。 TechNet Articleから引用すると:

テキストファイルの操作を開くテキストファイル

は、3段階のプロセスです。 他に何かできることをする前に、テキストファイルを開く必要があります。これは、既存のファイルを開くか、新しいテキスト ファイルを作成して、 を実行することができます。 (新しいファイルを作成すると、そのファイルは自動的に開かれて となり、すぐに使用できます)。いずれの方法でも、 TextStreamオブジェクトへの参照が返されます。 TextStream オブジェクトへの参照を取得した後、ファイルの読み書きができます。ただし、 は、同じファイルからの読み取りと書き込みを同時に行うことはできません。他の ワードでは、ファイルを開いて内容を読み取ってから、同じ操作でファイルに 追加データを書き込むことはできません。代わりに、 は内容を読み取り、ファイルを閉じてから、追加のデータを に再オープンして書き込む必要があります。既存のテキストファイルを開くと、そのファイルは読み取りまたは書き込みのいずれかで開かれた になります。新しいテキスト ファイルを作成すると、ファイルは書き込みのためにのみ開かれます. 以外の理由がない場合は、読み込むコンテンツはありません。最後に、 のテキストファイルを必ず閉じる必要があります。これは必須ではありませんが(スクリプトが終了するとすぐにファイルは になります)、良いプログラミング の練習です。

あなたの要件に合ったコードが必要です。 ReadAllを使用しているかのように、中間からWhileループを削除しましたが、テキストをループする必要はありません。

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 

上記の説明に問題がある場合や、詳しい説明が必要な場合は、お知らせください。

+0

'Dir'と' 'Open'(https://msdn.microsoft.com/en-us/library/office/gg264163.aspx)は一般的にはるかに高速ですが、私はあなたがFSOを使っているならば同意します。すべて、あなたはディレクトリを走査することを含むすべてのためにそれを使用するかもしれません。 –

関連する問題