Condividi:        

macro word per sostuire parole in piu file.

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

macro word per sostuire parole in piu file.

Postdi riccardo.marzari » 24/10/09 21:17

Buongiorno a tutti!
La mia esigenza è quella di creare una macro che permetta di sostituire determinate parole non nel documento aperto ma in tutti gli altri file (word ma anche excel e power point se fosse possibile) presenti in una cartella.
la situazione attuale è la seguente:
ho creato un command button
cliccandoci sopra mi si apre una user form con
-3 caselle di testo con le parole da sosituire
-3 caselle vuote in cui scrivere le parole "corrette"
- un pulsante che quando viene cliccato sostituisce tutte le parole nei docs della cartella MA mi apre i vari documenti permettondomi di salvarli con nome (per non modificare i documenti originali).

Il codice è il seguente:
--------------------------------------------------------
Private Sub CommandButton1_Click()

Set fs = Application.FileSearch
Dim doc As Document
Dim wd As New Word.Application

With fs
.LookIn = "C:\Documents and Settings\xxxxxx\Desktop\xxxxxxxxx"
.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 = textBox1.Text()
.Replacement.Text = TextBox2.Text()
.Text = textBox3.Text()
.Replacement.Text = TextBox4.Text()
.Text = textBox5.Text()
.Replacement.Text = TextBox6.Text()
.Text = textBox4.Text()


.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = True
End With
wd.Selection.Find.Execute Replace:=wdReplaceAll
wd.Documents.Open "C:\Documents and Settings\xxxxxx\Desktop\xxxxxxxx\ciao.doc"
Next i
Else
MsgBox "Nessun file trovato"
End If
End With

wd.Quit

End Sub


Private Sub UserForm_Initialize()
Textbox1.Text = "nomeazienda"
Textbox3.Text = "data"
Textbox5.Text = "datainizio"

End Sub
-------------------------------------------------------------------

C e qualcosa che non funziona..dove sta il problema?
Io credo che stia nel fatto che non si capisca che la text box 1 va sostituita con il contenuto della 3, e via dicendo..
Se volessi estendere la sostituzione non solo a ai .doc ma anche a .xls e .ppt come dovrei fare?

Grazie a chi mi darà una mano!!!
riccardo.marzari
Newbie
 
Post: 7
Iscritto il: 24/10/09 20:59

Sponsor
 

Re: macro word per sostutiore parole in piu file.

Postdi riccardo.marzari » 24/10/09 21:19

Errata corrige..
.Text = textBox1.Text()
.Replacement.Text = TextBox2.Text()
.Text = textBox3.Text()
.Replacement.Text = TextBox4.Text()
.Text = textBox5.Text()
.Replacement.Text = TextBox6.Text()
.Text = textBox4.Text()

la parte in rosso non consideratela..è sbagliata

Attendo ansioso risposte!
grazie!
riccardo.marzari
Newbie
 
Post: 7
Iscritto il: 24/10/09 20:59

Re: macro word per sostutiore parole in piu file.

Postdi Flash30005 » 24/10/09 21:48

Ciao Riccardo e benvenuto

Non posso provare la tua macro
ma se è solo per aprire tutti i file con l'appropriato applicativo devi inserire queste righe di codice
in public:
Codice: Seleziona tutto
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Public Const SW_NORMAL = 1

Nel modulo
Codice: Seleziona tutto
X = ShellExecute(hWnd, "Open", Percorso & Nfile, vbNullString, vbNullString, SW_NORMAL)

Dove percorso è il percorso del file e Nfile è il nome del file con estensione

Ciao

P.s. Per avere un desktop "pulito" e mantenere un S.O. "scattante" è opportuno mettere i documenti in apposite cartelle direttamente nell'HD
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: macro word per sostutiore parole in piu file.

Postdi Anthony47 » 24/10/09 23:47

ho creato [. . . . ]
- un pulsante che quando viene cliccato sostituisce tutte le parole nei docs della cartella MA mi apre i vari documenti permettondomi di salvarli con nome (per non modificare i documenti originali).

C e qualcosa che non funziona..dove sta il problema?

Puoi essere piu' preciso, perche' non ho capito se quello che hai sviluppato fa quello che avevi in mente, ma in modo non soddisfacente, o se c' e' qualcosa alla base.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro word per sostuire parole in piu file.

Postdi riccardo.marzari » 25/10/09 15:33

i problemi principali sono i seguenti:
1) su office 2007 il comando:

Set fs = Application.FileSearch

non funziona..e mi da errore..
con cosa dovrei sostituirlo?

2) con la mia macro sostituisco le parole solo in file word
che modifiche dovrei fare per sostituire anche in .xls e .ppt? (sempre in documenti dentro la cartella selezionata)

3) la sostituzione avviene (utilizando office 2003) solo nella coppia di textbox numero 5 e 6, mentre per le altre textbox non succede nulla. ho l 'impressione che legga solo il comando:

.Text = textBox5.Text()
.Replacement.Text = TextBox6.Text()

e non quelli prima (textbox 1 2 3 4)


spero di essere stato un po piu chiaro e scusate l inesperienza!
grazie
riccardo.marzari
Newbie
 
Post: 7
Iscritto il: 24/10/09 20:59

Re: macro word per sostuire parole in piu file.

Postdi Flash30005 » 25/10/09 18:01

Per il problema 1)
In questo topic
http://www.pc-facile.com/forum/viewtopic.php?f=26&t=81580&p=465904#p465904
c'è un file con macro che evita di utilizzare l'Application.FileSearch creando un elenco nel foglio "Elenco" dei file (nella macro solo quelli designati come "Scheda*.xls" modificabile in "*.*" per tutti i file)
Prova ad adattare quella procedura se hai problemi chiedi pure

per il problema 2)
è risolvibile con il mio precedente post

per il problema 3)
non so come tu stia usando i TextBox

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: macro word per sostuire parole in piu file.

Postdi riccardo.marzari » 25/10/09 19:43

Flash30005 ha scritto:Per il problema 1)
In questo topic
viewtopic.php?f=26&t=81580&p=465904#p465904
c'è un file con macro che evita di utilizzare l'Application.FileSearch creando un elenco nel foglio "Elenco" dei file (nella macro solo quelli designati come "Scheda*.xls" modificabile in "*.*" per tutti i file)
Prova ad adattare quella procedura se hai problemi chiedi pure


per ora òasciamo stare office 2007..quindi questo probl è OK

Flash30005 ha scritto:per il problema 2)
è risolvibile con il mio precedente post

dove devo cpiare i comendi che mi scrivi?
dentro a this document? userform? moduli?

Flash30005 ha scritto:per il problema 3)
non so come tu stia usando i TextBox


in pratica esegue solo l'ultima istruzione data.
se io voglio che sostituisca il contenuto della text 1 con il contenuto della 2 e CONTEMPORANEAMENTE il contenuto della 3 nella 4, della 5 nella 6 e cosi dicendo come devo fare??

il comando
Flash30005 ha scritto:X = ShellExecute(hWnd, "Open", Percorso & Nfile, vbNullString, vbNullString, SW_NORMAL)

sostituisce in pratica
riccardo.marzari ha scritto:wd.Documents.Open "C:\Documents and Settings\xxxxxx\Desktop\xxxxxxxx\ciao.doc"
e quindi va messo nello stesso punto o va messo su moduli?

Non ne vengo fuori scusate...
riccardo.marzari
Newbie
 
Post: 7
Iscritto il: 24/10/09 20:59

Re: macro word per sostuire parole in piu file.

Postdi Flash30005 » 25/10/09 19:54

il codice
Codice: Seleziona tutto
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Public Const SW_NORMAL = 1

va messo nel modulo (all'inizo sopra tutte le macro)
il codice
Codice: Seleziona tutto
X = ShellExecute(hWnd, "Open", Percorso & Nfile, vbNullString, vbNullString, SW_NORMAL)

sostituisce

Codice: Seleziona tutto
wd.Documents.Open "C:\Documents and Settings\xxxxxx\Desktop\xxxxxxxx\ciao.doc"

(in quanto apriresti solo il file ciao.doc) e la macro che fa tutto ciò dovrebbe essere nel modulo (come tutte le macro)

Per quanto riguarda il TetBox non ne ho mai usati e penso che tu possa usare i valori delle celle del foglio di excel che contiene la macro al posto dei TestBox
es.
In A1 potresdti mettere quello che inserivi nel TextBox1
A2 (o B1) quello che inserivi nel TextBox2 etc
Qyuindi nella macro dovrai richiamare
Range("A1).value
sostituisce nel documentoWord o nel FileExcel etc

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: macro word per sostuire parole in piu file.

Postdi riccardo.marzari » 25/10/09 19:56

adesso provo...
io comunque sto lavorando su un file word non excel..
quindi non posso svolgere l ultimo punto indicato.

Grazie
riccardo.marzari
Newbie
 
Post: 7
Iscritto il: 24/10/09 20:59

Re: macro word per sostuire parole in piu file.

Postdi riccardo.marzari » 25/10/09 21:36

per eseguire piu comandi contemporaneamente ho associato all evento command button1 click l esecuzioni di tanti command button quante sono le parole da sostituire...
il problema è che mi apre tanti file word quante sono le parole da sostituire e in ognuno mi sostituisce solo una parola!
io vorrei che mi si aprisse il file word con tutte le parole sostituite e poterlo salvare con nome.
Inoltre quando mi si apre il primo documento word poi non mi lascia piu fare le altre modifiche perche mi dice che il documento è gia aperto..

non ne vengo piu fuori!!!
grazie
riccardo.marzari
Newbie
 
Post: 7
Iscritto il: 24/10/09 20:59

Re: macro word per sostuire parole in piu file.

Postdi Anthony47 » 26/10/09 02:40

non ne vengo piu fuori!!!
Niente disperazione, per favore...

Non capisco perche' non apri i documenti in una unica istanza del programma word ma lo reinstanzi in continuazione, poi secondo me puoi fare molto con "registra macro".
Quindi:
-crea un file "Mastro.doc" che userai per le tue conversioni
-da Mastro.doc registra nuove macro mentre fai apertura di un file (1)
-poi fai la sostituzione globale di una parola con un' altra (2)
-poi salvi il file con nuovo nome (3)
-chiudi il file appena salvato

Le istruzioni che otterrai somiglieranno a queste:
Codice: Seleziona tutto
'1)
    Documents.Open FileName:="PIPPO_letter.doc", ConfirmConversions _
        :=False, ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", _
        PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _
        WritePasswordTemplate:="", Format:=wdOpenFormatAuto


Codice: Seleziona tutto
'2)
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "ALLORA"
        .Replacement.Text = "ALLORA-due"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

Codice: Seleziona tutto
'3)
    ActiveDocument.SaveAs FileName:="PIPPO2_letter.doc", FileFormat _
        :=wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
        True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
        False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False
    ActiveDocument.Close


Prendi comunque come modello il codice generato dal tua registra-nuova-macro.

Non ho capito se aprirai una unica userform (valida per tutti i files) o una per ogni file da convertire, questo determina dove posizionare l' apertura della form; comunque copia il contenuto dei textbox in 6 variabili "pubbliche" il cui contenuto servira' per il trova e sostituisci; devi definire queste variabili in testa al Modulo1(prima di ogni macro, usando la sintassi del tipo Public txttxt1 as String.
Modifica il codice del sostituisci tutto affinche' prenda il testo da sostituire dalle variabili (ex textbox), e il nome file da aprire usando un ciclo For I=1 to .FoundFiles.Count e come nome file .FoundFiles(i) (queste istruzioni seguiranno Set fs=Application.FileSearch e saranno inserite nel ciclo With fs); immagino che il nome di SaveAs sia una variante di quello di apertura, quindi lo calcolerai facendo ad esempio un concatenamento con .FoundFiles(i), es NomeOut = "New_" & .FoundFiles(i), poi userai NomeOut al postro della stringa (al posto di "PIPPO2_letter.doc", nell' esempio di sopra).

Per i file excel farai una cosa analoga, cioe' un Master.xls con la macro di gestione; per powerpoint prova a fare allo stesso modo, ma sinceramente non ho quasi nessuna esperienza (e nessuna esigenza), quindi molte cose dovrai scoprirle in proprio.

Scusate se suggerisco una strada diversa da quella che stavate esplorando, ma mi sembra piu' semplice cosi', e complicarsi un problema da risolvere mi sembra che sia meglio rimandarla.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "macro word per sostuire parole in piu file.":


Chi c’è in linea

Visitano il forum: Nessuno e 55 ospiti