web-dev-qa-db-ja.com

VBAのテキストファイル:ファイルを開く/検索/置換/名前を付けて保存/閉じる

ここに私が望んでいることの擬似コードがあります:

Open text File

Find "XXXXX" and Replace with "YYYY"

Save text File As

Close text file

これは私がこれまで持っているものです

Private Sub CommandButton1_Click()

Dim sBuf As String
Dim sTemp As String
Dim iFileNum As Integer
Dim sFileName As String

' Edit as needed
sFileName = "C:\filelocation"

iFileNum = FreeFile
Open sFileName For Input As iFileNum

Do Until EOF(iFileNum)
Line Input #iFileNum, sBuf
sTemp = sTemp & sBuf & vbCrLf
Loop
Close iFileNum

sTemp = Replace(sTemp, "DIM A", "1.75")
sTemp = Replace(sTemp, "DIM B", "2.00")
sTemp = Replace(sTemp, "DIM C", "3.00")
sTemp = Replace(sTemp, "DIM D", "4.00")

'Save txt file as (if possible)

iFileNum = FreeFile
Open sFileName For Output As iFileNum

Print #iFileNum, sTemp

Close iFileNum

'Close Userform
Unload UserForm1

End Sub

しかし、元のテキストファイルを上書きする代わりに、新しいファイルに「名前を付けて保存」したいと思います。

10
Russell Saari

この行を追加するだけです

sFileName = "C:\someotherfilelocation"

この行の直前

Open sFileName For Output As iFileNum

アイデアは、先に読んだものとは異なるファイルdifferentを開いて書き込むことです(C:\filelocation)。

あなたが空想を得て、実際の「名前を付けて保存」ダイアログボックスを表示したい場合、代わりにこれを行うことができます:

sFileName = Application.GetSaveAsFilename()

なぜメモ帳を使用するのですか?

Sub ReplaceStringInFile()

Dim sBuf As String
Dim sTemp As String
Dim iFileNum As Integer
Dim sFileName As String

' Edit as needed
sFileName = "C:\Temp\test.txt"

iFileNum = FreeFile
Open sFileName For Input As iFileNum

Do Until EOF(iFileNum)
    Line Input #iFileNum, sBuf
    sTemp = sTemp & sBuf & vbCrLf
Loop
Close iFileNum

sTemp = Replace(sTemp, "THIS", "THAT")

iFileNum = FreeFile
Open sFileName For Output As iFileNum
Print #iFileNum, sTemp
Close iFileNum

End Sub
12
Steve Rindsberg

手遅れだと思う...

今日、同じ問題に遭遇しました。ここにFileSystemObjectを使用した私のソリューションがあります:

Dim objFSO
Const ForReading = 1
Const ForWriting = 2
Dim objTS 'define a TextStream object
Dim strContents As String
Dim fileSpec As String

fileSpec = "C:\Temp\test.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTS = objFSO.OpenTextFile(fileSpec, ForReading)
strContents = objTS.ReadAll
strContents = Replace(strContents, "XXXXX", "YYYY")
objTS.Close

Set objTS = objFSO.OpenTextFile(fileSpec, ForWriting)
objTS.Write strContents
objTS.Close
11
Bojie Shuai

私は同じ問題を抱えていて、このサイトに出くわしました。

別の「ファイル名」を設定するだけの解決策

... 出力用 ...コマンドは非常にシンプルで便利でした。

さらに(Application.GetSaveAsFilename()ダイアログを超えて)

使用するだけで**新しいファイル名**を設定するのは非常に簡単です

replaceコマンドなので、ファイル名/拡張子を変更できます

例えば。 (最初の投稿から)

sFileName = "C:\filelocation"
iFileNum = FreeFile

Open sFileName For Input As iFileNum
content = (...edit the content) 

Close iFileNum

今だけ設定:

newFilename = replace(sFilename、 ".txt"、 ".csv")拡張子を変更する

または

newFilename = replace(sFilename、 "。"、 "_edit。")異なるファイル名の場合

そして、前と同じように

iFileNum = FreeFile
Open newFileName For Output As iFileNum

Print #iFileNum, content
Close iFileNum 

私は1時間以上サーフィンして、txtファイルの名前を変更する方法を見つけました。

多くの異なる解決策がありますが、それはとても簡単です:)

0
zmx