【问题标题】:Text file in VBA: Open/Find Replace/SaveAs/Close FileVBA 中的文本文件:打开/查找替换/另存为/关闭文件
【发布时间】:2012-05-03 15:17:07
【问题描述】:

这是我希望做的伪代码:

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

但我不想覆盖原始文本文件,而是想“另存为”到一个新文件。

【问题讨论】:

    标签: vba text-files


    【解决方案1】:

    我想我来晚了……

    今天遇到了同样的问题;这是我使用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
    

    【讨论】:

    • 不错,可能比其他提案更快
    • 我的最佳选择。
    【解决方案2】:

    为什么涉及记事本?

    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
    

    【讨论】:

    • 这段代码与问题中的代码有何不同?!
    • 现在 OP 已将其复制/粘贴到原始问题的 edited 版本中......根本没有。 ;-) 感谢您添加另存为(到不同的文件名)修复。
    【解决方案3】:

    只需添加这一行

    sFileName = "C:\someotherfilelocation"
    

    就在这一行之前

    Open sFileName For Output As iFileNum
    

    这个想法是打开并写入一个 与您之前阅读的文件不同的文件 (C:\filelocation)。

    如果您想花哨并显示一个真正的“另存为”对话框,您可以这样做:

    sFileName = Application.GetSaveAsFilename()
    

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,并遇到了这个网站。

      中设置另一个“文件名”的解决方案

      ... for output as ... 命令非常简单实用。

      此外(在 Application.GetSaveAsFilename() 对话框之外)

      设置一个**新文件名非常简单** 只是使用

      替换命令, 所以你可以更改文件名/扩展名

      例如。 (从第一篇文章开始)

      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 
      

      我浏览了一个多小时来了解如何重命名 txt 文件,

      有许多不同的解决方案,但它可能很容易:)

      【讨论】:

        【解决方案5】:

        此代码将打开并读取完整文本文件的行 该变量“ReadedData”将文本行保存在内存中

        Open "C:\satheesh\myfile\Hello.txt" For Input As #1
        
        do until EOF(1)   
        
               Input #1, ReadedData
        loop**
        

        【讨论】:

        • 这并没有解决问题。
        猜你喜欢
        • 2019-07-18
        • 1970-01-01
        • 1970-01-01
        • 2011-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        相关资源
        最近更新 更多