Búsqueda y reemplazo masivo - Microsoft Word 2013

Búsqueda y reemplazo masivo - Microsoft Word 2013

Estoy intentando crear una macro para realizar una búsqueda y reemplazo masivo en varios documentos de Word. Encontré este en la red y lo modifiqué, sin embargo, sigo recibiendo un error de tiempo de ejecución (5174) que dice que no se pudo encontrar el archivo (aunque definitivamente está en la carpeta).

Además, después de haber encontrado una solución al problema inicial, necesito poder buscar y reemplazar imágenes que se encuentran en un pie de página.

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

Respuesta1

Funciona bien para mí. Supongo que tienes un archivo de entrada roto y/o un nombre de archivo incorrecto.

Es hora de comenzar a depurar:

En el editor de VBA,establecer un punto de interrupciónen la Documents.Open FileName:=FNamelínea, yagregar un reloja Fname.

Ejecute el código y cada vez que se detenga, anote el nombre del archivo en el que está trabajando (que se muestra en el panel "Relojes"). Ahora, cuando arroje el error, sabrá con qué archivo tiene problemas.

Verifique ese archivo en busca de daños, problemas de permisos y/o rarezas generales. :)

Romper y mirar

Respuesta2

Aquí hay una posible respuesta, está diseñada para ser fácil de usar:

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

'El texto de arriba define tus objetos

 strFind = InputBox("Enter Text to find") 

 strReplace = InputBox("Enter replacement Text") 

'el usuario define el texto que desea buscar y reemplazar usando cuadros 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

'El bloque de código anterior permite al usuario seleccionar el archivo de carpeta para buscar

 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

Esto parece funcionar bien para Word 2016. Permite al usuario definir la ruta de su archivo y utiliza cuadros de entrada para definir el texto a reemplazar/buscar. Para reemplazar números en lugar de texto, defina strFind y strReplace como números enteros (u otro tipo de número) en lugar de texto. ¡Feliz codificación!

información relacionada