ここに私が望んでいることの擬似コードがあります:
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
しかし、元のテキストファイルを上書きする代わりに、新しいファイルに「名前を付けて保存」したいと思います。
この行を追加するだけです
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
手遅れだと思う...
今日、同じ問題に遭遇しました。ここに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
私は同じ問題を抱えていて、このサイトに出くわしました。
別の「ファイル名」を設定するだけの解決策
... 出力用 ...コマンドは非常にシンプルで便利でした。
さらに(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ファイルの名前を変更する方法を見つけました。
多くの異なる解決策がありますが、それはとても簡単です:)