Проблема с использованием Macro / VBA для поиска и замены содержимого слова - PullRequest
0 голосов
/ 18 февраля 2019

Я хочу обновить текст в многочисленных файлах Word (во многих папках и подпапках).У меня есть функция, чтобы пройти через все из них.

Я в основном хочу найти и заменить во всем документе.Но я не могу найти и заменить работу.Я вижу, что файлы открываются и закрываются, но в конце ничего не сохраняется.

У меня есть код макроса / VBA для обновления файла слова.но это не работает, и я не мог найти, в чем проблема.пожалуйста помогите!

вот код:

Sub UpdateOneFolderToUnicode()
    Dim strFolder As String, strFile As String
    strFolder = "my folder here"
    If strFolder = "" Then Exit Sub

    'strFile = Dir(strFolder & "\*.docx", vbNormal) ' for docx files
    strFile = Dir(strFolder & "\*.doc", vbNormal)
    While strFile <> ""
      updateOneFile strFolder & "\" & strFile
      strFile = Dir()
    Wend
End Sub

Sub updateOneFile(filePath)
    Dim wdDoc As Document
    Application.ScreenUpdating = True
On Error GoTo UpdateErr

    Set wdDoc = Documents.Open(FileName:=filePath, AddToRecentFiles:=False, Visible:=False)
    With wdDoc
    With .Range.Find
      .Text = "~"
      .Replacement.Text = ChrW(625)
      .Wrap = wdFindContinue
      .MatchCase = True
    End With
    .Range.Find.Execute Replace:=wdReplaceAll
    End With

    wdDoc.Close SaveChanges:=True
    Set wdDoc = Nothing    
    Application.ScreenUpdating = True    
    Exit Sub

UpdateErr:
    Debug.Print "Update file: " & filePath & " Error: " & Err.Description
    Set wdDoc = Nothing
End Sub

1 Ответ

0 голосов
/ 20 февраля 2019

ошибок нет.

и я заставил его работать, обновив часть кода до:

Set wdDoc = Documents.Open(FileName:=filePath, AddToRecentFiles:=False, Visible:=False)
Set myRange = wdDoc.Content

With myRange.Find
  .Text = "Ä"
  .Replacement.Text = ChrW(256)
  .Wrap = wdFindContinue
  .MatchCase = True
End With
myRange.Find.Execute Replace:=wdReplaceAll

В основном используйте Content вместо Range, и я должен поставить wdDoc.Conent в переменную, иначе все еще не работает (не знаю почему).

...