1

Я пытаюсь создать макрос для массового поиска и замены документов из нескольких слов. Я нашел это в сети и изменил его, однако я продолжаю получать ошибку времени выполнения (5174), говорящую, что файл не может быть найден (даже если он определенно находится в папке).

Кроме того, после того, как я нашел решение первоначальной проблемы, мне нужно найти и заменить изображения, которые находятся в нижнем колонтитуле.

Sub ReplaceText()
  Dim Directory As String
  Dim FType As String
  Dim FName As String

Directory = "C:\Users\pieria\Desktop\TempPics"
FType = "*.docx"

ChDir Directory
FName = Dir(FType)
' for each file you find, run this loop
Do While FName <> ""
    ' open the file
    Documents.Open FileName:=FName  '<--Error is supposedly here 

    ' search and replace the company name
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "CompanyA"
        .MatchCase = True
        .Replacement.Text = "CompanyB"
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

    ' save and close the current document
    ActiveDocument.Close wdSaveChanges

    ' look for next matching file
    FName = Dir
Loop 
End Sub

2 ответа2

1

У меня отлично работает. Я предполагаю, что у вас неверный входной файл и / или имя файла Wonky.

Время начать отладку:

В редакторе VBA установите точку останова для Documents.Open FileName:=FName и добавьте Watch в Fname .

Запустите код и каждый раз, когда он останавливается, запишите имя файла, над которым он работает (отображается на панели "Часы"). Теперь, когда он выдает ошибку, вы будете знать, с каким файлом он имеет проблемы.

Проверьте этот файл на наличие повреждений, проблем с разрешениями и / или общей странности. :)

Break 'n' Watch

0

Вот потенциальный ответ, он разработан, чтобы быть удобным для пользователя:

Public Sub MassReplace()

Dim strPath As String
 Dim strFile As String
Dim FType As String
Dim FName As String
Dim strFind As String
 Dim strReplace As String
 Dim WordApp As Object
 Dim WordDoc As Object

«Текст выше определяет ваши объекты

 strFind = InputBox("Enter Text to find") 

 strReplace = InputBox("Enter replacement Text") 

'пользователь определяет текст, который он хочет найти и заменить, используя поля ввода

    With Application.FileDialog(msoFileDialogFolderPicker)
    If .Show Then
     strPath = .SelectedItems(1)
      Else
         MsgBox "No folder selected!", vbExclamation
         Exit Sub
        End If
 End With

  If Right(strPath, 1) <> "\" Then
     strPath = strPath & "\"
     strFile = Dir(strPath & "*.docx*")
 End If
 Application.ScreenUpdating = False

Блок кода выше позволяет пользователю выбрать файл папки для поиска

 Do While strFile <> "" 'Do this while strFile is not blank

    Set WordApp = CreateObject("Word.Application") 'Open MS word
    WordApp.Visible = True 'Make word visible
    Set WordDoc = WordApp.Documents.Open(strPath & strFile) 'open file in folder
    WordApp.ActiveDocument.Range.Select ' select all text

    With WordApp.Selection.Find 'Using the find function allows a search of text
    .Text = strFind 'find "strFind"
    .Replacement.Text = strReplace 'replacement text is "strReplace"
    .Wrap = wdFindContinue
    '.Format = False
    '.MatchCase = False
    '.MatchWholeWord = False
    '.MatchWildcards = False
    '.MatchSoundsLike = False
    .Execute Replace:=wdReplaceAll 'replace all text

    WordApp.ActiveDocument.Close wdSaveChanges 'Close document and save changes

    End With 'End with block



    WordApp.Quit 'Close the word application
    strFile = Dir 'Go back to the directory

   Loop

 Application.ScreenUpdating = True
 End Sub

Кажется, это хорошо работает для Word 2016. Это позволяет пользователю определять свой путь к файлу и использует поля ввода для определения текста для замены / поиска. Чтобы заменить числа вместо текста, определите strFind и strReplace как целые числа (или другой тип числа) вместо текста. Удачного кодирования!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .