Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    programma o funzione di word

    Ho la seguente necessità...solo voi potete salvarmi.

    Ho moltissimi documenti word ed ho la necessità di sostituire la medesima parola in essi contenuta

    esempio per intenderci:

    immaginate di aver 1000 documenti word all'interno di ogni documento c'è la presenza della parola "casa" ...ecco io ho la necessità di sostituire in un unica soluzione (non vorrei aprire documento per documento e sostituire la parola) la parola "casa" con "moto". come posso fare? esiste qualche funzione di word oppure qualche programmino che me lo consenta in tempi rapidissimi?

    Attendo grazie.

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Usa il registratore di macro su un singolo documento, applica la sostituzione che desideri e osserva il codice che viene generato. A questo punto è facile ciclare tutti i file di una cartella e applicare a ciascuno quel codice.

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ti ho scritto un esempio. Devi solo modificare il path della tua cartella. Per praticità apri un file di word che non sia uno della cartella che dovrai modificare, incolla la macro ed eseguila. Verranno sostituite solo le parole intere, quindi casa sì, miacasa no. Testala ovviamente su una copia di backup dei tuoi file.

    codice:
    Sub trova_e_sostituisci()
    
    Const PATH = "C:\qui_specifichi\il_percorso_della_cartella_dei_doc\"
    Dim doc As Document
    Dim wd As New Word.Application
    Dim fn As String
    
    fn = Dir(PATH & "*.doc")
        While fn <> ""
            Set doc = wd.Documents.Open(PATH & fn)
            'MsgBox fn
            
        wd.Selection.Find.ClearFormatting
        wd.Selection.Find.Replacement.ClearFormatting
        With wd.Selection.Find
            .Text = "casa"
            .Replacement.Text = "moto"
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = True
        End With
        wd.Selection.Find.Execute Replace:=wdReplaceAll
    
        doc.Save
        doc.Close
        fn = Dir
        Wend
        
    wd.Quit
    End Sub

  4. #4

    grazie per la gentile risposta

    Gentile nicola75ss,

    sei stato estremamente carino e disponibile al massimo nel procurarmi questa tua soluzione di codice di programmazione scritta proprio per me.

    Volevo porti, al riguardo due domande:

    1. non importa se nella directory ove sono presenti i documenti word, ci sono anche altri documenti con estensioni diverse? tipo .xls etc (per i quali non ho necessità di sostituire le parole in argomento;

    2. non importa se i documenti sono presenti sia nella root principale, ma anche nelle sottocartelle interne a questa root.
    es. questa è la root princpale nella quale sono presenti alcuni documenti C:\Documents and Settings\pippo\Desktop\pippo1

    poi quì

    C:\Documents and Settings\pippo\Desktop\pippo1\pippo2

    sono presenti altri documenti ed altre sotto cartelle

    ectc. etc.


    3. poichè non sono pratico di macro, potresti essere così gentile nel spiegarmi come si fa e si lancia una macro del genere?

    grazie di tutto

    e come sempre tanti complimenti per il magico forum di html.

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922

    Re: grazie per la gentile risposta

    Originariamente inviato da emilia
    Volevo porti, al riguardo due domande:

    1. non importa se nella directory ove sono presenti i documenti word, ci sono anche altri documenti con estensioni diverse? tipo .xls etc (per i quali non ho necessità di sostituire le parole in argomento;
    La sostituzione avverrà soltanto nei file di word, cioè quelli con estensione doc.


    Originariamente inviato da emilia

    2. non importa se i documenti sono presenti sia nella root principale, ma anche nelle sottocartelle interne a questa root.
    es. questa è la root princpale nella quale sono presenti alcuni documenti C:\Documents and Settings\pippo\Desktop\pippo1

    poi quì

    C:\Documents and Settings\pippo\Desktop\pippo1\pippo2

    sono presenti altri documenti ed altre sotto cartelle

    ectc. etc.
    Il codice che ti ho scritto non presupponeva una ricerca ricorsiva, cioè con sottocartelle.
    Ciò significa che se mettessi il percorso "C:\Documents and Settings\pippo\Desktop\pippo1" la sostituzione avverrebbe soltanto sui file doc contenuti al suo interno ma non nei file presenti nelle sue sottocartelle. Per fare ciò è necessario modificare radicalmente il codice.


    Originariamente inviato da emilia

    3. poichè non sono pratico di macro, potresti essere così gentile nel spiegarmi come si fa e si lancia una macro del genere?

    grazie di tutto

    e come sempre tanti complimenti per il magico forum di html.
    Per eseguire la macro (per il momento priva di ricorsività) e quanto meno testarla, apri un file di word qualsiasi, vai su strumenti => macro => macro, assegna un nome alla stessa (nel mio esempio trova_e_sostituisci) e premi crea. A questo punto incolli il codice e specifichi il percorso della cartella nella quale fare le sostituzioni. Una volta salvata la macro, vai di nuovo su strumenti => macro => macro e fai click su esegui.

    Prova con qualche file e vedi se funziona. Appena ho tempo io o qualche altro volontario te la convertirà in una funzione ricorsiva.

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Versione ricorsiva senza troppi fronzoli nè controlli.
    Ti consiglio di testare la macro su una copia della tua cartella. Devi solo modificare la riga del percorso.


    codice:
    Sub trovaSostituisciRicorsivo()
    Set fs = Application.FileSearch
    Dim doc As Document
    Dim wd As New Word.Application
    
    With fs
        .LookIn = "C:\Documents and Settings\pippo\Desktop\pippo1\"
        .SearchSubFolders = True
        .FileName = "*.doc"
        If .Execute() > 0 Then
            For i = 1 To .FoundFiles.Count
                'MsgBox .FoundFiles(i)
                Set doc = wd.Documents.Open(.FoundFiles(i))
    
                wd.Selection.Find.ClearFormatting
                wd.Selection.Find.Replacement.ClearFormatting
                With wd.Selection.Find
                    .Text = "casa"
                    .Replacement.Text = "moto"
                    .Forward = True
                    .Wrap = wdFindContinue
                    .Format = False
                    .MatchCase = False
                    .MatchWholeWord = True
                End With
                wd.Selection.Find.Execute Replace:=wdReplaceAll
    
                doc.Save
                doc.Close
            Next i
        Else
            MsgBox "Nessun file trovato"
        End If
    End With
    
    wd.Quit
    
    End Sub

  7. #7

    intanto ti ringrazio

    intanto ti ringrazio, poi la provo e ti farò sapere

  8. #8

    ri-grazie aspetta la mia risposta sulla prova

    potrai non crederci, ma non ho avuto ancora la possibilità (ovvero il tempo) per provarlo, menomale che ti ho ringraziato in tempo utile, altrimenti avrei fatto una figuraccia.
    appena posso lo provo e ti farò sapere anche per una tua personale soddisfazione.
    ri-grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.