Sulla base dei file allegati ho abbozzato questa macro, da inserire in un modulo standard (es Modulo1) del file excel:
- Codice: Seleziona tutto
Sub wordrepl()
Dim ObjWord As Object, FullNome As String, myCerca As String, myRepl As String
Dim objDoc As Object, I As Long
'
'Chiedi il file da gestire:
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "Word", "*.doc*", 1 '<<< Filtro per estensione
.Show
If .SelectedItems.Count = 0 Then
MsgBox ("Nessuna voce selezionata, procedura annullata")
GoTo ESci
End If
FullNome = .SelectedItems(1) 'Directory e Nome del file selezionato
End With
'
'Aprilo in word:
Set ObjWord = CreateObject("Word.Application")
ObjWord.Visible = True
Set objDoc = ObjWord.Documents.Open(Filename:=FullNome)
'
If ObjWord Is Nothing Then
MsgBox "Applicazione non disponibile", vbExclamation
GoTo ESci
End If
'
'Cerca e sostituisci:
With objDoc.ActiveWindow
.Selection.HomeKey Unit:=6 'wdStory
For I = 2 To Cells(Rows.Count, 1).End(xlUp).Row
myCerca = "Numero scheda: " & Cells(I, 1).Value
myRepl = "Scheda: " & Cells(I, 2) & " " & Cells(I, 3)
.Selection.Find.ClearFormatting
.Selection.Find.Replacement.ClearFormatting
With .Selection.Find
.Wrap = 1
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
.Selection.Find.Execute myCerca, False, , , , , , , , myRepl
Next I
End With
MsgBox ("Completato... " & vbCrLf & "Controllare il file e salvarlo")
'
ESci:
Set ObjWord = Nothing
Set objDoc = Nothing
End Sub
Va lanciata mentre e' attivo il foglio contenente la tabella Numero /Nominativi.
La macro chiede di selezionare il file word da manipolare, lo apre in una
nuova sessione di Word e procede alle sostituzioni.
Alla fine del lavoro sara' emesso un messaggio che invita a controllare il file generato e salvarlo; completato il salvataggio la sessione di Word puo' essere chiusa.
Ho preferito questa sequenza, ripetto al "Salva documento" / "chiudi Word" nella macro, per poter gestire eventuali errori tra quanto desiderato e quanto realizzato dalla macro.
Ciao