Mentre per il conteggio non esiste una proprietà Count che io sappia….
quindi devi trovare e sostituire un occorrenza alla volta e accumulare il conteggio in una variabile da esporre nel messaggio finale.
Io sono riuscito a trovare la soluzione solo in questo modo:
Esempio … Da un testo Cerca la parola Ciao e Sostituisci con Come stai
e sono riuscito a conteggiare le occorrenze solo ripetendo in un ciclo le impostazioni delle proprietà e la ricerca, sostituendo un occorrenza alla volta:
Option Explicit
' WORD DOCUMENT SEARCH AND REPLACE
Sub MySearchAndReplace()
Dim lngCount As Long
Dim blnResult As Boolean
Dim txtSearch As String
Dim txtReplace As String
' set and check inputbox
txtSearch = InputBox("Trova :", "Search")
If txtSearch = vbNullString Then GoTo ActionDeleted
txtReplace = InputBox("Sostituisci con :", "Replace")
If txtReplace = vbNullString Then GoTo ActionDeleted
' set properties
Do
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = txtSearch
.Replacement.Text = txtReplace
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
' search and replace
blnResult = Selection.Find.Execute(Replace:=wdReplaceOne)
' check and increase count
If blnResult Then lngCount = lngCount + 1
Loop While blnResult
' refresh document
Selection.Collapse wdCollapseEnd
ActiveDocument.Fields.Update
' check result and send msg
If lngCount > 0 Then
MsgBox "Trovato [ " & lngCount & " ] occorenze per la ricerca di :" & vbCrLf & vbCrLf & "'" & txtSearch & "'" & _
vbCrLf & "sostituito con :" & vbCrLf & "'" & txtReplace & "'", vbInformation, "Info"
Else
MsgBox "Nessuna occorenza trovate per :" & vbCrLf & vbCrLf & "'" & txtSearch & "'", vbInformation, "Info"
End If
Exit Sub
' action deleted
ActionDeleted:
MsgBox "Operazione Annullata", vbInformation, "Info"
End Sub
Verifica se fa al caso tuo e se i controlli sono soddisfacenti.
;-)
Edit:
ti descrivo la Sub per darti una traccia abbastanza completa…
- In Vba Imposta sempre Option Explicit Option Explicit statement (VBA) | Microsoft Learn
- Definizione delle variabili da usare nella Sub
- variabile di tipo Long per conteggiare il totale delle occorrenze da sostituire
- variabile di tipo Boolean da usare per Vero/Falso nel controllo se esistono occorrenze per la ricerca da effettuare
- due variabili stringa usate per ricevere il valore restituito dalle InputBox
- Impostazione e Controllo per le InputBox
- nelle variabili stringa si riceve i valori di ritorno dalle InputBox
- si esegue il test per validare le due variabili nel caso in cui venga premuto il pulsante Annulla nelle InputBox
- in tal caso si salta alla fine della Sub dove viene emesso il messaggio di Operazione Annullata
- Impostazione delle proprietà per effettuare la ricerca e la sostituzione delle occorrenze
- qui si definiscono le modalità di ricerca e di sostituzione delle occorrenze
- Esecuzione di un ciclo Do While
- se Selection.Find.Execute(Replace:=wdReplaceOne) riturna il valore Booleano = True
- si incrementa il conteggio delle occorenze
- si esegue il loop per verificare se ci sono ulteriori occorrenze
- se non ci sono occorrenze per il Trova e Sostituisci, allora il valore Booleano sarà = False e si esce dal Loop
- Refresh del documento
- viene tolta la selezione sulla ultima occorrenza trovata e sostituita
- refresh del documento per una corretta visualizzazione durante l'emissione di MsgBox di completamento. Se togli tali istruzioni si vedrà sotto alla MsgBox l'ultima occorrenza rilevata e ancora non refresh…ata e potrebbe trarre in inganno.
- Controllo del risultato ed emissione messaggio di completamento
- si valuta il conteggio delle occorrenze se è maggiore di 0 oppure no …
- gli MsgBox descrivono il risultato dell'operazione eseguita
P.S. Ho provato con tale metodo e i test sono buoni. Vediamo se qualcun altro ha degli approcci diversi e migliori perchè per me l'argomento è del tutto nuovo.