Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Recuperare dati da campi moduli

151 views
Skip to first unread message

Saris

unread,
Jan 6, 2010, 12:12:01 PM1/6/10
to
Salve e bun anno a tutti voi.

Ho la necessità di salvare i file word nominandoli in questo modo:

avendo tre campi moduli denominati text1, tex2 e text3
il file deve essere salvato nella directory corrispondente al text1
ed il nome deve essere text1!text2_text3
Ho provato con una cosa simile ma penso di essere molto lontano dal poter
dire di conoscere il vba

Sub SalvaconNome()
Dim z As String
Dim SStr As String
Dim x As String
Dim y As String
Set z := FormFields.Name("text1").TypeText

SStr = "\\2010\text1\" & z
On Error Resume Next
MkDir SStr
x = FormFields.Name("text2").Text
y = "text3"
ActiveDocument.SaveAs FileName:="\\2010\" & z & "\" & y & x & ".xls"
On Error GoTo 0
End Sub
Ovviamente questa era una prova e quindi il percorso ed in nome del file non
è effettivamente quello che cerco.
Ma il mio problema sta nel recuperare il testo scritto nel campo modulo.

Esiste anche un modo per salvare il file in formato pdf? Anche per office
2003?


Ringrazio anticipatamente per i suggerimenti che vorrete dare.

Giovanni Zezza

unread,
Jan 7, 2010, 5:01:11 AM1/7/10
to
Saris, nel messaggio <52526D93-E860-4983...@microsoft.com>,
scriveva:

>Salve e bun anno a tutti voi.
>

>Ho la necessit� di salvare i file word nominandoli in questo modo:


>
>avendo tre campi moduli denominati text1, tex2 e text3
>il file deve essere salvato nella directory corrispondente al text1
>ed il nome deve essere text1!text2_text3
>Ho provato con una cosa simile ma penso di essere molto lontano dal poter
>dire di conoscere il vba
>
>Sub SalvaconNome()
> Dim z As String
> Dim SStr As String
> Dim x As String
> Dim y As String
> Set z := FormFields.Name("text1").TypeText

L'operatore di assegnazione � "=", l'operatore ":=" � usato solo per
riferire per nome i parametri di una funzione o di una procedura.

Dall'insieme FormFields, per accedere ad un singolo elemento, si pu� usare
il metodo Item dell'insieme, quindi eventualmente:

Set z = FormFields.Item("text1"). ...

ma � consentita anche la forma abbreviata:

Set z = FormFields("text1"). ...

Il risultato del campo � poi contenuto nella propriet� Result dell'oggetto
FormField, quindi:

Set z = FormFields.Item("text1").Result

oppure, pi� brevemente:

Set z = FormFields("text1").Result

Lo stesso, naturalmente, per accedere al contenuto dei campi text2 e text3.

>Ma il mio problema sta nel recuperare il testo scritto nel campo modulo.
>
>Esiste anche un modo per salvare il file in formato pdf? Anche per office
>2003?

Dipende che cosa intendi per "salvare in formato pdf": puoi stampare in
formato pdf, con una stampante virtuale tipo PDFCreator (e diversi altri
prodotti gratuiti), ma perdi la struttura a campi del documento Word. Per
ottenere un modulo PDF compilabile occorrono altri programmi. Word 2007 �
invece in grado di esportare direttamente in PDF, ma non so quale controllo
ci sia sul tipo di documento PDF prodotto.

Ciao.

Saris

unread,
Jan 7, 2010, 9:08:01 AM1/7/10
to

"Giovanni Zezza" ha scritto:

> Saris, nel messaggio <52526D93-E860-4983...@microsoft.com>,
> scriveva:
>
> >Salve e bun anno a tutti voi.
> >

> >Ho la necessità di salvare i file word nominandoli in questo modo:


> >
> >avendo tre campi moduli denominati text1, tex2 e text3
> >il file deve essere salvato nella directory corrispondente al text1
> >ed il nome deve essere text1!text2_text3
> >Ho provato con una cosa simile ma penso di essere molto lontano dal poter
> >dire di conoscere il vba
> >
> >Sub SalvaconNome()
> > Dim z As String
> > Dim SStr As String
> > Dim x As String
> > Dim y As String
> > Set z := FormFields.Name("text1").TypeText
>

> L'operatore di assegnazione è "=", l'operatore ":=" è usato solo per


> riferire per nome i parametri di una funzione o di una procedura.
>

> Dall'insieme FormFields, per accedere ad un singolo elemento, si può usare


> il metodo Item dell'insieme, quindi eventualmente:
>
> Set z = FormFields.Item("text1"). ...
>

> ma è consentita anche la forma abbreviata:


>
> Set z = FormFields("text1"). ...
>

> Il risultato del campo è poi contenuto nella proprietà Result dell'oggetto


> FormField, quindi:
>
> Set z = FormFields.Item("text1").Result
>

> oppure, più brevemente:


>
> Set z = FormFields("text1").Result
>
> Lo stesso, naturalmente, per accedere al contenuto dei campi text2 e text3.
>
> >Ma il mio problema sta nel recuperare il testo scritto nel campo modulo.
> >
> >Esiste anche un modo per salvare il file in formato pdf? Anche per office
> >2003?
>
> Dipende che cosa intendi per "salvare in formato pdf": puoi stampare in
> formato pdf, con una stampante virtuale tipo PDFCreator (e diversi altri
> prodotti gratuiti), ma perdi la struttura a campi del documento Word. Per

> ottenere un modulo PDF compilabile occorrono altri programmi. Word 2007 è


> invece in grado di esportare direttamente in PDF, ma non so quale controllo
> ci sia sul tipo di documento PDF prodotto.
>
> Ciao.

Perfetto, sono riuscito a sistemare la cosa, grazie per l'aiuto.
Riporto sotto il codice vba in favore di chi come me non è tanto esperto:

Sub SalvaconNome()
Dim z As String
Dim SStr As String
Dim x As String
Dim y As String

z = ActiveDocument.FormFields("text1").Result
SStr = "\\archivio\prova\Archivio\2010\" & z


On Error Resume Next
MkDir SStr

x = ActiveDocument.FormFields("text2").Result
y = ActiveDocument.FormFields("text3").Result
ActiveDocument.SaveAs (SStr & "\" & z & "!" & x & "_" & y & ".doc")


On Error GoTo 0

End Sub


Ora mi vengono altre domandine in mente:
In questo modo riesco a salvare il file nella cartella prescelta;
1-Potrei salvare, sempre da word utilizzando una macro, l'eventuale file
generato con pdfcreator (e quindi gia rinominato nel modo che cerco, come
sopra)?
2-Oppure se lo stampo in formato tiff ho qualche possibilità di automazione?
3-per rinominare il file come con la routine di sopra mi devo per forza
affidare ai campi moduli oppure qualcuno saprebbe darmi qualche suggerimento
per una strada diversa.
Che so cercare all'interno del foglio la parola o i numeri compresi tra
"lettera nr." e "datata" per esempio:
"lettera nr. 1/234567 datata 07.01.2009"
in non so quale riga del documento word ed avere un codice vba che salvi il
documento con nome: "1/234567" oppure "1!234567"

Giovanni Zezza

unread,
Jan 7, 2010, 10:31:50 AM1/7/10
to
Saris, nel messaggio <722EFA53-C982-43B3...@microsoft.com>,
scriveva:

>1-Potrei salvare, sempre da word utilizzando una macro, l'eventuale file
>generato con pdfcreator (e quindi gia rinominato nel modo che cerco, come
>sopra)?

Ci sono, per quanto riguarda PDFCreator, diverse opzioni.

Intanto, PDFCreator � visto come una stampante, quindi per ottenere un
documento PDF basta stampare il documento Word (cosa che � possibile anche
da VBA, con il metodo PrintOut dell'oggetto Document), eventualmente dopo
aver selezionato la stampante (propriet� ActivePrinter di Application):

...
Dim nome_stampante_precedente As String
...


ActiveDocument.SaveAs (SStr & "\" & z & "!" & x & "_" & y & ".doc")

...
nome_stampante_precedente = Application.ActivePrinter
Application.ActivePrinter = "PDFCreator"
ActiveDocument.PrintOut
Application.ActivePrinter = nome_stampante_precedente
...

Per quanto riguarda il nome e la posizione del documento PDF cos� ottenuto,
� possibile sfruttare le opzioni di salvataggio automatico di PDFCreator,
con cui � possibile costruire il nome in diversi modi.

Se questo non � sufficiente, � possibile un controllo pi� preciso
attraverso l'interfaccia di automazione di PDFCreator; � una cosa un po'
pi� complicata, e un po' aleatoria in VBA (perch� non consente di
agganciarsi agli eventi di PDFCreator), ma ci sono alcuni script di
esempio.

>2-Oppure se lo stampo in formato tiff ho qualche possibilit� di automazione?

Se usi PDFCreator, hai le stesse opzioni per qualunque formato di output
scelto, quindi anche per TIFF. Con altri strumenti, non ne ho idea.

>3-per rinominare il file come con la routine di sopra mi devo per forza
>affidare ai campi moduli oppure qualcuno saprebbe darmi qualche suggerimento
>per una strada diversa.
>Che so cercare all'interno del foglio la parola o i numeri compresi tra
>"lettera nr." e "datata" per esempio:
>"lettera nr. 1/234567 datata 07.01.2009"
>in non so quale riga del documento word ed avere un codice vba che salvi il
>documento con nome: "1/234567" oppure "1!234567"

Recuperare dati da un campo � pi� semplice, ma per il resto � certamente
possibile anche cercare un particolare testo nel documento. Si tratta pi�
che altro di garantirsi che tutti i documenti siano effettivamente
strutturati allo stesso modo, cos� che tendenzialmente la ricerca vada
sempre a buon fine, e cautelarsi da eventuali errori con qualche procedura
di controllo.

Ciao.

Saris

unread,
Jan 7, 2010, 1:39:01 PM1/7/10
to

"Giovanni Zezza" ha scritto:

> Saris, nel messaggio <722EFA53-C982-43B3...@microsoft.com>,
> scriveva:
>
> >1-Potrei salvare, sempre da word utilizzando una macro, l'eventuale file
> >generato con pdfcreator (e quindi gia rinominato nel modo che cerco, come
> >sopra)?
>
> Ci sono, per quanto riguarda PDFCreator, diverse opzioni.
>

> Intanto, PDFCreator è visto come una stampante, quindi per ottenere un
> documento PDF basta stampare il documento Word (cosa che è possibile anche


> da VBA, con il metodo PrintOut dell'oggetto Document), eventualmente dopo

> aver selezionato la stampante (proprietà ActivePrinter di Application):


>
> ...
> Dim nome_stampante_precedente As String
> ...
> ActiveDocument.SaveAs (SStr & "\" & z & "!" & x & "_" & y & ".doc")
> ...
> nome_stampante_precedente = Application.ActivePrinter
> Application.ActivePrinter = "PDFCreator"
> ActiveDocument.PrintOut
> Application.ActivePrinter = nome_stampante_precedente
> ...
>

> Per quanto riguarda il nome e la posizione del documento PDF così ottenuto,
> è possibile sfruttare le opzioni di salvataggio automatico di PDFCreator,
> con cui è possibile costruire il nome in diversi modi.
>
> Se questo non è sufficiente, è possibile un controllo più preciso
> attraverso l'interfaccia di automazione di PDFCreator; è una cosa un po'
> più complicata, e un po' aleatoria in VBA (perché non consente di


> agganciarsi agli eventi di PDFCreator), ma ci sono alcuni script di
> esempio.
>

> >2-Oppure se lo stampo in formato tiff ho qualche possibilità di automazione?


>
> Se usi PDFCreator, hai le stesse opzioni per qualunque formato di output
> scelto, quindi anche per TIFF. Con altri strumenti, non ne ho idea.
>
> >3-per rinominare il file come con la routine di sopra mi devo per forza
> >affidare ai campi moduli oppure qualcuno saprebbe darmi qualche suggerimento
> >per una strada diversa.
> >Che so cercare all'interno del foglio la parola o i numeri compresi tra
> >"lettera nr." e "datata" per esempio:
> >"lettera nr. 1/234567 datata 07.01.2009"
> >in non so quale riga del documento word ed avere un codice vba che salvi il
> >documento con nome: "1/234567" oppure "1!234567"
>

> Recuperare dati da un campo è più semplice, ma per il resto è certamente
> possibile anche cercare un particolare testo nel documento. Si tratta più


> che altro di garantirsi che tutti i documenti siano effettivamente

> strutturati allo stesso modo, così che tendenzialmente la ricerca vada


> sempre a buon fine, e cautelarsi da eventuali errori con qualche procedura
> di controllo.
>
> Ciao.

> .
Per come avrai capito, quello che cerco di fare è un archivio e la cosa
migliore sarebbe quella di salvare file pdf. Ero già riuscito a stampare
automaticamente un documento prima su carta e poi su pdf ma quello che mi
serviva era che il file pdf andasse salvato direttamente nella cartellina
idonea. Il nome del file lo riconosce in automatico dopo il salvataggio del
file doc ma purtroppo la directory di destinazione non è quasi mai la stessa.
Per il resto ti ringrazio ancora per i suggerimenti che mi hai dato.
Saresti così gentile da indirizzarmi sulla ricerca del testo all'interno di
un file .doc, nel frattempo dato che non ho lume della cosa inizio a
guardarmi intorno.
Grazie ancora.

Giovanni Zezza

unread,
Jan 8, 2010, 5:36:09 AM1/8/10
to
Saris, nel messaggio <D653ADE8-C27B-4C41...@microsoft.com>,
scriveva:

>Per come avrai capito, quello che cerco di fare � un archivio e la cosa
>migliore sarebbe quella di salvare file pdf. Ero gi� riuscito a stampare

>automaticamente un documento prima su carta e poi su pdf ma quello che mi
>serviva era che il file pdf andasse salvato direttamente nella cartellina
>idonea. Il nome del file lo riconosce in automatico dopo il salvataggio del

>file doc ma purtroppo la directory di destinazione non � quasi mai la stessa.

Facendo sempre riferimento a PDFCreator (non perch� sia l'unico strumento
di questo tipo disponibile, n� necessariamente il migliore, ma perch� �
l'unico che conosco direttamente), nella directory "COM\MS Office" del
programma trovi alcuni esempi di script in VBA di Office; dall'editor di
Visual Basic di Word, puoi importare il form frmPDFCreatorWord.frm, in cui
trovi un esempio di codice per controllare PDFCreator da Word.

Puoi iniziare da l� e adattarlo alle tue esigenze. La routine che fa il
lavoro che ti interessa � "SaveWholeDocumentAsPDF".

>Saresti cos� gentile da indirizzarmi sulla ricerca del testo all'interno di

>un file .doc, nel frattempo dato che non ho lume della cosa inizio a
>guardarmi intorno.

Le ricerche tramite l'oggetto Find, propriet� Find di Selection o di Range.
La cosa pi� semplice per renderti conto di come fare � attivare la
registrazione di una macro, fare una ricerca e andare a vedere il codice
prodotto.

Ciao.

0 new messages