VBA中的文本文件:打开/查找替换/保存/关闭文件

Rus*_*ari 10 vba text-files

这是我希望做的伪代码:

Open text File

Find "XXXXX" and Replace with "YYYY"

Save text File As

Close text file
Run Code Online (Sandbox Code Playgroud)

这就是我到目前为止所拥有的

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
Run Code Online (Sandbox Code Playgroud)

但是我没有覆盖原始文本文件,而是想"另存为"新文件.

Ste*_*erg 12

为何涉及记事本?

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
Run Code Online (Sandbox Code Playgroud)

  • 现在OP已经将其复制/粘贴到原始问题的*编辑*版本中......根本没有.;-)感谢您添加另存为(到不同的文件名)修复. (2认同)

小智 11

猜猜我来不及......

今天遇到了同样的问题; 这是我的解决方案使用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
Run Code Online (Sandbox Code Playgroud)


Jea*_*ett 8

只需添加此行即可

sFileName = "C:\someotherfilelocation"
Run Code Online (Sandbox Code Playgroud)

就在这条线之前

Open sFileName For Output As iFileNum
Run Code Online (Sandbox Code Playgroud)

这个想法是打开并写入一个不同于你之前读过的文件(C:\filelocation).

如果你想获得想象并显示一个真正的"另存为"对话框,你可以这样做:

sFileName = Application.GetSaveAsFilename()
Run Code Online (Sandbox Code Playgroud)