使用VBA OpenTextFile写入替换文本的代码使文件损坏

时间:2018-06-21 08:14:35

标签: vba excel-vba excel

我希望从Excel文件中的宏打开一个.docx文件,在该文件中查找字符串的所有实例,然后用另一个字符串替换该字符串。

我可以找到并打开文件。我不知道字符串是否已被替换,因为下面的代码破坏了文件。 Word不能再打开该文件。

这是宏的代码:

Dim objFSO
Dim objTS 'define a TextStream object
Const ForReading = 1
Const ForWriting = 2
Const TristateUseDefault = -2

Dim strContents As String
Dim fileSpec As String

Sub SearchAndReplaceTextInFile()
    fileSpec = "C:\some\path\to\file\location\file.docx"

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTS = objFSO.OpenTextFile(fileSpec, ForReading, TristateUseDefault)

    strContents = objTS.ReadAll
    strContents = Replace(strContents, "adress", "address")

    Set objTS = objFSO.OpenTextFile(fileSpec, ForWriting, TristateUseDefault)

    objTS.Write strContents
    objTS.Close
End Sub

1 个答案:

答案 0 :(得分:2)

OpenTextFile仅支持两种iomodeForReading模式。要替换文本文件中的文本,请使用ForAppending并将CreateTextFile设置为overwrite

在文本文件中查找和替换

True

在Word文档中查找和替换

Dim objFSO
Dim objTS                                             'define a TextStream object
Const ForReading = 1
Const ForWriting = 2
Const TristateUseDefault = -2

Dim strContents As String
Dim fileSpec As String

Sub SearchAndReplaceTextInFile()
    fileSpec = "C:\Users\best buy\Documents\EBirdRegionalRequest.txt"    '"C:\some\path\to\file\location\file.docx"

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTS = objFSO.OpenTextFile(Filename:=fileSpec, iomode:=ForReading, Format:=TristateUseDefault)

    strContents = objTS.ReadAll
    strContents = Replace(strContents, "adress", "address")

    Set objTS = objFSO.CreateTextFile(Filename:=fileSpec, overwrite:=True)

    objTS.Write strContents
    objTS.Close

    Debug.Print objFSO.OpenTextFile(Filename:=fileSpec, iomode:=ForReading, Format:=TristateUseDefault).ReadAll
End Sub

评论

您不能使用Sub SearchAndReplaceTextWordDoc(fileSpec As String, Find As String, Replace As String) Const wdReplaceAll As Long = 2 Const wdFindContinue = 1 Dim wdRange As Variant Dim doc As Object, wdApp As Object Set wdApp = CreateObject("Word.Application") Set doc = wdApp.Documents.Open(Filename:=fileSpec, ReadOnly:=False) For Each wdRange In doc.StoryRanges With wdRange.Find .Text = Find .Replacement.Text = Replace .Wrap = wdFindContinue .ClearFormatting .Replacement.ClearFormatting .Replacement.Highlight = False .Execute Replace:=wdReplaceAll End With Next wdApp.Visible = True doc.Close SaveChanges:=True wdApp.Quit End Sub 来修改Office文档。 Office文档实际上是Zip文件。如果将FileSystemObjectdocx的文件扩展名更改为zip并打开,则会看到多个文件夹。这些文件夹中包含清单,元数据和xml文件。