Localizar e substituir em massa - Microsoft Word 2013

1

Estou tentando criar uma macro para fazer uma descoberta em massa e substituí-la em vários documentos do Word. Eu encontrei um presente na net e alterou-o no entanto eu continuo recebendo um erro de tempo de execução (5174) dizendo que o arquivo não pôde ser encontrado (mesmo que seja definitivamente na pasta).

Além disso, depois de encontrar uma solução para o problema inicial, preciso localizar e substituir imagens que estão em um rodapé.

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
    
por Antonio 29.09.2015 / 15:06

2 respostas

1

Funciona bem para mim. Meu palpite é que você tem um arquivo de entrada quebrado e / ou um nome de arquivo ruim.

Hora de começar a depuração:

No editor do VBA, defina um ponto de interrupção na linha Documents.Open FileName:=FName e < href="http://blogs.msdn.com/b/frice/archive/2005/10/27/485692.aspx"> adicione uma Observação a Fname .

Execute o código e, toda vez que ele parar, anote o nome do arquivo em que ele está trabalhando (mostrado no painel "Relógios"). Agora, quando lançar o erro, você saberá com qual arquivo está tendo problemas.

Verifique se há corrupção no arquivo, problemas de permissão e / ou estranheza geral. :)

    
por 29.09.2015 / 15:29
0

Aqui está uma resposta em potencial, foi criada para ser amigável:

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

'O texto acima define seus objetos

 strFind = InputBox("Enter Text to find") 

 strReplace = InputBox("Enter replacement Text") 

'usuário define o texto que deseja localizar e substituir usando caixas de entrada

    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

'O bloco de código acima permite ao usuário selecionar o arquivo da pasta para pesquisar

 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

Isso parece funcionar bem no Word 2016. Ele permite que um usuário defina o caminho do arquivo e use caixas de entrada para definir o texto a ser substituído / encontrado. Para substituir números em vez de texto, defina strFind e strReplace como números inteiros (ou outro tipo de número) em vez de texto. Codificação feliz!

    
por 02.04.2018 / 22:38