Condividi:        

Macro per Word

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 per Word

Postdi Gattuccio0 » 07/06/10 17:16

Ciao a tutti.
Ho deciso di cominciare a fare delle prove creando delle macro (in modo da poterci capire qualcosa) anche perchè pe rimparare qualcosa devo esercitarmi con azioni "semplici".

Ho alcuni file che si chiamano:
1.txt
2.txt
231.txt
ecc. (non sono in ordine numerico crescente)

Il mio primo obiettivo è il seguente:
Aprire un documento in Word e creare una macro affiché mi apra ogni documento, mi selezioni tutto il suo contenuto, lo copi nel documento in Word, chiuda il documento in .txt e salvai il documento in Word.

ora...il mio codice è il seguente:
Codice: Seleziona tutto
Sub Macro1()
'
' Macro1 Macro
'
'
    Documents.Open FileName:="12.txt", ConfirmConversions:=False, ReadOnly:= _
        False, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:= _
        "", Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="", _
        Format:=wdOpenFormatAuto, XMLTransform:="", Encoding:=65001
    Selection.WholeStory
    Selection.Copy
    ActiveWindow.Close
    Selection.PasteAndFormat (wdPasteDefault)
    Selection.TypeParagraph
    ChangeFileOpenDirectory "C:\Users\Daniele Marcialis\Desktop\"
End Sub


Dove devo intervenire affinchè al posto del singolo file mi processi tutti i files?
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Sponsor
 

Re: Macro per Word

Postdi Flash30005 » 07/06/10 17:34

Se quella macro fa il caso tuo per il file 12.txt (anche se penso manchi il percorso del file)

potresti crearti un elenco in un foglio di excel es. da A1 a A12

Poi mettere la tua macro all'inerno di un ciclo For...next
es.
Codice: Seleziona tutto
Sub Macro1()
For RR = 1 to 12
FileT = Range("A" & RR).value
'----- tua macro con la variabile del file FileT invece di "12.txt"

    Documents.Open FileName:=FileT, ConfirmConversions:=False, ReadOnly:= _
        False, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:= _
        "", Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="", _
        Format:=wdOpenFormatAuto, XMLTransform:="", Encoding:=65001
    Selection.WholeStory
    Selection.Copy
    ActiveWindow.Close
    Selection.PasteAndFormat (wdPasteDefault)
    Selection.TypeParagraph
    ChangeFileOpenDirectory "C:\Users\Daniele Marcialis\Desktop\"
'-----
next RR
End Sub

Comunque eviterei di mettere i file sul Desktop e attribuirei loro un nome specifico
Mentre, per l'elenco in automatico puoi prendere spunto dalla macro per le ricette che facemmo tempo fa

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 per Word

Postdi Gattuccio0 » 07/06/10 17:42

ciao Flash,
in effetti la prima cosa che ho cercato di fare è di prendere la vecchia macro per cercare di trovare le modalità operativa ma non sono stato in grado di decifrarla in quanto per me è come scrivere un business plan con una tastiera in giapponese.

Per questo ho deciso di partire da una macro semplice semplice (ma a quanto pare per me così semplice non lo è).

Il fatto che cercando nella guida in linea non ho trovato nessun tipo di informazione in merito.
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Re: Macro per Word

Postdi Flash30005 » 08/06/10 00:47

Ok
allora posiziona i file testo in una cartella "Prova" di C:\
per avere un percorso C:\Prova
Apri un nuovo file di excel
e nel modulo inserirai queste due macro
Codice: Seleziona tutto
Sub ElencoFile(Direct As String, Estens As String, Inicell As Range)
  Dim i As Integer, f As String
  ChDir Direct
  f = Dir(Estens)
  If f = "" Then Exit Sub
  While f <> ""
    i = i + 1
    Inicell(i) = f
    f = Dir
  Wend
End Sub
Sub ElencoFileTxt()
Worksheets("Foglio1").Select
Range("A1").Select
  With ActiveCell
    Worksheets("Foglio1").Range(.Cells(1), .End(xlDown)).ClearContents
  End With
    ElencoFile Direct:=Perc, Estens:="*.txt", Inicell:=ActiveCell
End Sub

Queste creranno l'elenco dei file nel foglio1 (colonna A)

Dovendo utilizzare il percorso (Perc)
su più macro dovrai rendere "pubblica" la variabile "Perc" con questo codice all'inizio del modulo
(qundi il codice va inserito sopra le due macro precedenti)
Codice: Seleziona tutto
Public Perc As String


Occorre, ora, una macro che apra l'applicativo Word e i vari file testo
Codice: Seleziona tutto
Sub Convert()
URT = Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row
For RR = 1 To URT
FileT = Range("A" & RR).Value
FileD = Mid(FileT, 1, Len(FileT) - 4)
    Set oApp = CreateObject("Word.Application")
   oApp.Documents.Open Filename:=Perc & FileT, Encoding:=1252
    oApp.ActiveDocument.SaveAs Filename:=Perc & FileD & ".Doc", FileFormat:=wdFormatDocument
    oApp.Application.Quit
Set oApp = Nothing
Next RR
End Sub


Infine la macro di avvio che definisce il percorso e richiami le macro interessate
Codice: Seleziona tutto
Sub Avvio()
Perc = "C:\Prova\"
Call ElencoFileTxt
Call Convert
End Sub


Prova ad avviare la macro Avvio (con pochi file txt)

Fai sapere
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 per Word

Postdi Gattuccio0 » 08/06/10 09:31

[quote="Flash30005"]
'----- tua macro con la variabile del file FileT invece di "12.txt"

Documents.Open FileName:=FileT, ConfirmConversions:=False, ReadOnly:= _
False, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:= _
"", Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="", _
Format:=wdOpenFormatAuto, XMLTransform:="", Encoding:=65001
Selection.WholeStory
Selection.Copy
ActiveWindow.Close
Selection.PasteAndFormat (wdPasteDefault)
Selection.TypeParagraph
ChangeFileOpenDirectory "C:\Users\Daniele Marcialis\Desktop\"
'-----
next RR
End Sub[/code]

Ciao Flash.
Ho fatto la prova ma da errore di runtime 13:
Documents.Open FileName:=FileT, ConfirmConversions:=False, ReadOnly:= _
False, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:= _
"", Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="", _
Format:=wdOpenFormatAuto, XMLTransform:="", Encoding:=65001
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Re: Macro per Word

Postdi Gattuccio0 » 08/06/10 10:15

Ciao Flash.
Ho fatto la soluzione 2, ovvero quella di aprire una macro in Excel (inserendo tutte le macro da te suggerite).

Mi ha creato un file in Excel con l'elenco di tutti i files processati nella colonna A:
12.txt
13.txt
123.txt
ecc.

Inoltre nella cartella C:\prova\ ha creato tanti files in Word quanti ne ha processati in .txt

Per inglobare tutti i contenuti in un unico file, devo lanciare la macro di Word, ora?
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Re: Macro per Word

Postdi Flash30005 » 08/06/10 10:56

ehm, veramente avevo capito che la tua esigenza fosse quella di conversione da file testo a file.doc
e non di inserimento di tutti i file in un documento word

Dovrei vedere di modificare la macro per far sì di non chiudere ogni volta il documento di word ma accodare i file testo e al termine della routine salvare e chiudere word.
Ci penserò su, magari nel frattempo arrivano altri consigli... ;)

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 per Word

Postdi Gattuccio0 » 08/06/10 11:06

Tranquillo Flash, nessun problema...era per quel motivo che ero partito dalla macro di Word pensando:
registro una macro che mi apra il file in .txt o .doc.
seleziona il contentuto;
copia il contentuto;
lo incolla nel file pippo.doc (o pippo.txt);
chiuda il file aperto precendemente;
ripete l'operazione con i files contentuti nella directory. Mi sono incartatato con quest'ultimo passaggio in quanto non ero riuscito a trovare il comando per dire di puntare a tutti i files.
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Re: Macro per Word

Postdi Flash30005 » 08/06/10 12:52

Allora...
Lasciando invariate tutte le altre macro
sostituisci solo la macro "Convert"
Codice: Seleziona tutto
Sub Convert()
If Dir(Perc & "Mio.doc", vbDirectory) <> "" Then Kill Perc & "Mio.Doc"
URT = Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row
    Set oApp = CreateObject("Word.Application")
        oApp.Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0
    oApp.ActiveDocument.SaveAs Filename:=Perc & "Mio.doc", FileFormat:=wdFormatDocument
For RR = 1 To URT
    FileT = Range("A" & RR).Value
    oApp.Documents.Open Filename:=Perc & FileT, Encoding:=1252
    oApp.Selection.WholeStory
    oApp.Selection.Copy
    oApp.ActiveDocument.Close
    oApp.Selection.Paste
    oApp.Selection.InsertBreak
Next RR
oApp.ActiveDocument.SaveAs Filename:=Perc & "Mio.Doc", FileFormat:=wdFormatDocument
oApp.Application.Quit
Set oApp = Nothing
End Sub


Alla fine della routine avrai nella directory prova un file chiamato "Mio.doc" che verrà cancellato ad ogni riavvio
quindi salvalo altrove nel caso volessi conservarlo (oppure potremmo nominarlo con data e ora)

Fai sapere
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 per Word

Postdi Gattuccio0 » 08/06/10 13:23

solamente 2 impressioni:

1) stupore: ogni volta che dal forum mi arriva una risposta rimango sempre basito nel vedere le capacità di coloro che vi postano le soluzioni

2) incazzatura: ebbene si...mista ad invidia in quanto ogni risposta sottolinea le mie incapacità

Max precedentemente mi aveva postato alcuni indirizzi web per poter imparare (o meglio cominciare l'approccio a macro e VBA) in quanto le info di Microsoft non rispondono ad oltre l'80% delle mie richieste...ma che voi sappiate ci sono corsi seri in giro? Io qui a Milano sento sempre di corsi base per Excell che a mio avviso non hanno nulla a che fare con le soluzioni che postano Anthony o Flash :undecided:
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Re: Macro per Word

Postdi Flash30005 » 08/06/10 13:35

Se ti senti più "tranquillo" nel partecipare a dei corsi, sicuramente non fanno male,
Però vuoi sapere come ho fatto?
ho registrato la macro in Word
l'ho trascritta in excel
sapendo che questi codici appartengono ad un'altra applicazione (non di excel) ho dovuto attribuire i comandi a quel tipo di applicazione
infatti noterai che tutti i comandi Word hanno oApp.EtcEtc
questa applicazione è "settata" all'inizio con
Codice: Seleziona tutto
   Set oApp = CreateObject("Word.Application")

Ho tolto alcuni codici che non "servivano" (soprattutto quelli con "False", che sono di default)
inserito il tutto nella routine precedente
ho ottenuto quello che ti occorreva ;)

Ciao

P.s.
La macro prevede una nuova pagina (interruzione di pagina) ad ogni file se non è necessaria questa interruzione,
puoi commentare o cancellare questa riga
Codice: Seleziona tutto
   oApp.Selection.InsertBreak
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 per Word

Postdi Gattuccio0 » 09/06/10 15:14

La prima domanda che mi è venuta in mente è stata "ma come diavolo avrà fatto?"

Sinceramente volevo chiedertelo ma avevo paura - o meglio avevo la certezza - che non avrei capito i passaggi tecnici.

difatti...
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Re: Macro per Word

Postdi Flash30005 » 09/06/10 15:47

Se guardi la macro Convert ti renderai conto che non è difficile da capire
ma vediamo passo passo cosa fa.
Questa riga, se trova il file Mio.doc lo cancella
Codice: Seleziona tutto
If Dir(Perc & "Mio.doc", vbDirectory) <> "" Then Kill Perc & "Mio.Doc"

conta le righe sul foglio1 (che corrispondono all'elenco dei file txt contenuti nella directory)
Codice: Seleziona tutto
URT = Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row

questo codice apre l'applicazione word
crea un nuovo foglio e lo rinomina come Mio.doc
Codice: Seleziona tutto
    Set oApp = CreateObject("Word.Application")
        oApp.Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0
    oApp.ActiveDocument.SaveAs Filename:=Perc & "Mio.doc", FileFormat:=wdFormatDocument


scansiona tutte le righe da 1 alla fine dell'elenco
[codee]For RR = 1 To URT
....
Next RR[/code]
"prende" il nome del file testo della riga attuale (RR)
Codice: Seleziona tutto
FileT = Range("A" & RR).Value

Apre il file testo
lo seleziona tutto
e lo copia
Codice: Seleziona tutto
   
    oApp.Documents.Open Filename:=Perc & FileT, Encoding:=1252
    oApp.Selection.WholeStory
    oApp.Selection.Copy


Chiude il file testo
Codice: Seleziona tutto
    oApp.ActiveDocument.Close



ora rimane attivo il file Mio.doc
quindi con questi codici
incolla (ciò che si ha in memoria)
e inserisce una nuova pagina
Codice: Seleziona tutto
    oApp.Selection.Paste
    oApp.Selection.InsertBreak



alla fine delle righe RR (dopo che RR = URT)

Salva il file file Mio.doc
Chiude l'applicazione Word
e rilascia l'applicazione oApp
Codice: Seleziona tutto
oApp.ActiveDocument.SaveAs Filename:=Perc & "Mio.Doc", FileFormat:=wdFormatDocument
oApp.Application.Quit
Set oApp = Nothing



Ora è più chiaro?

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 per Word

Postdi Gattuccio0 » 09/06/10 17:18

sul processo logico non avevo dubbi...il mio problema è alla base: mi mancano le nozioni per sintetizzare un'operazione o processo in un codice. :oops:
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Re: Macro per Word

Postdi Gattuccio0 » 09/06/10 17:43

Quindi...ammettiamo che io abbia avuto un tot di pagine scaricate da web (al posto dei files in .txt) che ne so:
pippo.asp
pippo.asp_1
pippo.asp_2

ecc.

per poter procedere come hai fatto tu avrei dovuto creare una macro così?

Codice: Seleziona tutto
Public Perc As String
Sub prova1()
Sub ElencoFile(Direct As String, Estens As String, Inicell As Range)
  Dim i As Integer, f As String
  ChDir Direct
  f = Dir(Estens)
  If f = "" Then Exit Sub
  While f <> ""
    i = i + 1
    Inicell(i) = f
    f = Dir
  Wend
End Sub
Sub ElencoFileAsp()
Worksheets("Foglio1").Select
Range("A1").Select
  With ActiveCell
    Worksheets("Foglio1").Range(.Cells(1), .End(xlDown)).ClearContents
  End With
    ElencoFile Direct:=Perc, Estens:="*.asp", Inicell:=ActiveCell
End Sub
Sub Convert()
If Dir(Perc & "Mio.doc", vbDirectory) <> "" Then Kill Perc & "Mio.Doc"
URT = Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row
    Set oApp = CreateObject("MozillaFirefox.Application")
        oApp.Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0
    oApp.ActiveDocument.SaveAs Filename:=Perc & "Mio.doc", FileFormat:=wdFormatDocument
For RR = 1 To URT
    FileT = Range("A" & RR).Value
    oApp.Documents.Open Filename:=Perc & FileT, Encoding:=1252
    oApp.Selection.WholeStory
    oApp.Selection.Copy
    oApp.ActiveDocument.Close
    oApp.Selection.Paste
    oApp.Selection.InsertBreak
Next RR
oApp.ActiveDocument.SaveAs Filename:=Perc & "Mio.Doc", FileFormat:=wdFormatDocument
oApp.Application.Quit
Set oApp = Nothing
End Sub
Sub Avvio()
Perc = "C:\Prova\"
Call ElencoFileAsp
Call Convert
End Sub
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Re: Macro per Word

Postdi Gattuccio0 » 09/06/10 17:44

Dimenticavo un pezzo: i file nativi erano si in .asp ma per processare il tutto pensavo di farli aprire tramite Mozilla e poi venivano salvati come file in .txt in modo che poi il processo della macro da te realizzata fosse uguale.
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Re: Macro per Word

Postdi Flash30005 » 09/06/10 23:08

in file txt
suppongo di si

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 per Word

Postdi Anthony47 » 10/06/10 01:46

Non voglio destabilizzare la discussione gia' avanzata ma, visto che si parla di file di testo, non poteva essere piu' semplice creare un unico file accodando i files col comando dos type e indirizzando su un file di output?
Insomma il comando (ad esempio) TYPE *.txt >FILE_DI_OUTPUT.TXT, al limite da inserire in un .bat che include:
-cd "C:\il path complto\
-type *.txt >C:\NOMEFILEOUT.txt

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

Re: Macro per Word

Postdi Gattuccio0 » 10/06/10 09:08

Ciao Anthony.
Una domanda: il tuo suggerimento si riferisce alla prima parte della discussione (ovvero unire in unico file più files .txt)?

Se io però, come da secondo esempio, avessi alcuni file in .asp (in quanto pagine salvate dal browser) e volessi:
1) aprirle con Mozilla
2) salvarle in formato .txt
3) unirle in un unico documento .txt (non necessario ma dato che riprende gli esempi sopra citati aggiungiamolo)

potrei risolvere il tutto creando un .bat che sarebbe

cd "C:\prova\il path complto\
type *.asp >C:\prova\NOMEFILEOUT.txt

(prova è la cartella in cui ho i files .asp)
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Re: Macro per Word

Postdi Flash30005 » 10/06/10 10:52

il Type trascrive tutti i caratteri ascii in un nuovo file
però devi usare il doppio segno >> e non uno solo
perché il doppio segno accoda
Codice: Seleziona tutto
Type *.asp >> Mio.txt

(non so cosa succede con una file .asp)
ma puoi provare

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-

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Macro per Word":


Chi c’è in linea

Visitano il forum: Marius44 e 51 ospiti