Discussione:
Numero progressivo in word
(troppo vecchio per rispondere)
Emiliano
2007-11-16 17:00:00 UTC
Permalink
Ciao...

vorrei sapere se esiste la possibilità di creare un foglio word con un
numero progressivo che aumenta ogni volta che apro il file.

In sostanza dovrei creare un foglio per preventivi che abbia un numero di
protocollo progessivo automatico.
Pippo
2007-11-17 00:11:08 UTC
Permalink
Post by Emiliano
vorrei sapere se esiste la possibilità di creare un foglio word con un
numero progressivo che aumenta ogni volta che apro il file.
In sostanza dovrei creare un foglio per preventivi che abbia un numero di
protocollo progessivo automatico.
Dai uno sguardo al link
http://www.itportal.it/office/word/numerazione_word/Default.asp

NB: ti devi registrare (e' gratis) al sito.

Ciao
Pippo
Pippo
2007-11-17 01:15:07 UTC
Permalink
Post by Pippo
Post by Emiliano
vorrei sapere se esiste la possibilità di creare un foglio word con un
numero progressivo che aumenta ogni volta che apro il file.
In sostanza dovrei creare un foglio per preventivi che abbia un numero di
protocollo progessivo automatico.
Dai uno sguardo al link
http://www.itportal.it/office/word/numerazione_word/Default.asp
Uhm.... :-((... leggendo meglio l'articolo al suddetto link, non credo che
faccia al tuo caso..

Ciao
Pippo
Pippo
2007-11-17 02:30:48 UTC
Permalink
Post by Pippo
Uhm.... :-((... leggendo meglio l'articolo al suddetto link, non credo che
faccia al tuo caso..
Il seguente link http://tinyurl.com/2r4flk credo sia quello giusto!!

Speriamo che l'autore (il mitico *Maurizio Borrelli*) o qualche esperto di
vba, possa intervenire per adattarlo alle tue esigenze!

Maurizio, ci sei? ;-))

Ciao
Pippo
Emiliano
2007-11-17 21:31:01 UTC
Permalink
Grazie Pippo,
ma non riesco a fare sta cosa in un foglio word.

vorrei che il numero che inserisco cambia ogni volta che apro il file in
modo crescente (da 1 a......)
Post by Pippo
Post by Pippo
Uhm.... :-((... leggendo meglio l'articolo al suddetto link, non credo che
faccia al tuo caso..
Il seguente link http://tinyurl.com/2r4flk credo sia quello giusto!!
Speriamo che l'autore (il mitico *Maurizio Borrelli*) o qualche esperto di
vba, possa intervenire per adattarlo alle tue esigenze!
Maurizio, ci sei? ;-))
Ciao
Pippo
Pippo
2007-11-17 22:28:36 UTC
Permalink
Post by Emiliano
Post by Pippo
Il seguente link http://tinyurl.com/2r4flk credo sia quello giusto!!
Speriamo che l'autore (il mitico *Maurizio Borrelli*) o qualche esperto di
vba, possa intervenire per adattarlo alle tue esigenze!
ma non riesco a fare sta cosa in un foglio word.
vorrei che il numero che inserisco cambia ogni volta che apro il file in
modo crescente (da 1 a......)
NB: Nel tuo modello, nel punto dove vuoi compaia il numero progressivo,
scrivi XXX (tre ics consecutive, che devono essere le *uniche* presenti nel
tuo modello), poi salvalo nel formato modello "tuomodello.dot" (NB: NON
*.doc).
Prova poi, il codice seguente (ho provato a fare delle modifiche al codice
dell'autore per adattarlo al tuo caso), che va incollato nel modulo:

" THISDOCUMENT "

del progetto Visual Basic del tuo *modello*.

'=======================================

Option Explicit


Private Sub Document_New()
Dim strAppName As String
Dim strSection As String
Dim strKey As String
Dim strDefault As String


strAppName = "Luigi L"
strSection = "Test"
strKey = "Progressivo"
strDefault = "0"
SaveSetting strAppName _
, strSection _
, strKey _
, CLng(GetSetting(strAppName, strSection, strKey, strDefault)) _
+ 1

With Selection.Find

.ClearFormatting
.Replacement.ClearFormatting

.Text = "XXX"

.Replacement.Text = GetSetting(strAppName, strSection, strKey,
strDefault)

.Forward = True
.Wrap = wdFindContinue
.Format = True
.Execute Replace:=wdReplaceAll

End With

End Sub

'========================================



SALVA il tuo modello.

Apri un nuovo (menu File =>Nuovo..) documento sulla base del tuo modello e,
noterari che, al posto delle tre XXX compare il numero progressivo.

Ho notato che, per azzerare il contatore e farlo ripartire da 1, basta
cambiare nome alla seguente stringa : es. da strAppName = "Luigi L" a
strAppName = "Pippo".

Ho fatto delle prove e sembra FUNZIONARE, pero', spero nell'intervento
dell'autore "Maurizio Borrelli" per eventuali modifiche e/o miglioramenti:
io sono ad un livello mooolto basso con il vba!

Inoltre, come suggerito dall'autore stesso, in quel thread , bisogna leggere
nella guida vba :

*GetSetting*

*SaveSetting*

... ma non ho avuto il tempo di farlo..

PS: fammi sapere !!! ;-)))

Ciao

Pippo
Emiliano
2007-11-18 09:22:00 UTC
Permalink
Ciao Pippo....ancora tante grazie....

forse ho dimenticato di dirti che sono "un pollo" di Office....

Mi dovresti guidare passo-passo e vediamo se ci riusciamo....

attendo tua...

grazie mille!!!!

emiliano
Post by Pippo
Post by Emiliano
Post by Pippo
Il seguente link http://tinyurl.com/2r4flk credo sia quello giusto!!
Speriamo che l'autore (il mitico *Maurizio Borrelli*) o qualche esperto di
vba, possa intervenire per adattarlo alle tue esigenze!
ma non riesco a fare sta cosa in un foglio word.
vorrei che il numero che inserisco cambia ogni volta che apro il file in
modo crescente (da 1 a......)
NB: Nel tuo modello, nel punto dove vuoi compaia il numero progressivo,
scrivi XXX (tre ics consecutive, che devono essere le *uniche* presenti nel
tuo modello), poi salvalo nel formato modello "tuomodello.dot" (NB: NON
*.doc).
Prova poi, il codice seguente (ho provato a fare delle modifiche al codice
" THISDOCUMENT "
del progetto Visual Basic del tuo *modello*.
'=======================================
Option Explicit
Private Sub Document_New()
Dim strAppName As String
Dim strSection As String
Dim strKey As String
Dim strDefault As String
strAppName = "Luigi L"
strSection = "Test"
strKey = "Progressivo"
strDefault = "0"
SaveSetting strAppName _
, strSection _
, strKey _
, CLng(GetSetting(strAppName, strSection, strKey, strDefault)) _
+ 1
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "XXX"
.Replacement.Text = GetSetting(strAppName, strSection, strKey,
strDefault)
.Forward = True
.Wrap = wdFindContinue
.Format = True
.Execute Replace:=wdReplaceAll
End With
End Sub
'========================================
SALVA il tuo modello.
Apri un nuovo (menu File =>Nuovo..) documento sulla base del tuo modello e,
noterari che, al posto delle tre XXX compare il numero progressivo.
Ho notato che, per azzerare il contatore e farlo ripartire da 1, basta
cambiare nome alla seguente stringa : es. da strAppName = "Luigi L" a
strAppName = "Pippo".
Ho fatto delle prove e sembra FUNZIONARE, pero', spero nell'intervento
io sono ad un livello mooolto basso con il vba!
Inoltre, come suggerito dall'autore stesso, in quel thread , bisogna leggere
*GetSetting*
*SaveSetting*
... ma non ho avuto il tempo di farlo..
PS: fammi sapere !!! ;-)))
Ciao
Pippo
Pippo
2007-11-18 15:19:27 UTC
Permalink
Post by Emiliano
Post by Pippo
NB: Nel tuo modello, nel punto dove vuoi compaia il numero progressivo,
scrivi XXX (tre ics consecutive, che devono essere le *uniche* presenti nel
tuo modello), poi salvalo nel formato modello "tuomodello.dot" (NB: NON
*.doc).
Prova poi, il codice seguente (ho provato a fare delle modifiche al codice
" THISDOCUMENT "
del progetto Visual Basic del tuo *modello*.
'=======================================
Option Explicit
Private Sub Document_New()
Dim strAppName As String
Dim strSection As String
Dim strKey As String
Dim strDefault As String
strAppName = "Luigi L"
strSection = "Test"
strKey = "Progressivo"
strDefault = "0"
SaveSetting strAppName _
, strSection _
, strKey _
, CLng(GetSetting(strAppName, strSection, strKey, strDefault)) _
+ 1
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "XXX"
.Replacement.Text = GetSetting(strAppName, strSection, strKey,
strDefault)
.Forward = True
.Wrap = wdFindContinue
.Format = True
.Execute Replace:=wdReplaceAll
End With
End Sub
'========================================
SALVA il tuo modello.
Apri un nuovo (menu File =>Nuovo..) documento sulla base del tuo modello e,
noterari che, al posto delle tre XXX compare il numero progressivo.
forse ho dimenticato di dirti che sono "un pollo" di Office....
Mi dovresti guidare passo-passo e vediamo se ci riusciamo....
attendo tua...
Se mi puoi spiegare i punti in cui hai difficolta' a seguire le mie
istruzione......;-)

Per fare quello che vuoi, occorre utilizzare una MACRO scritta (o copiata
:-)) ) nel linguaggio di programmazione Visual Basic.

Quale VERSIONE (io ho Word 2003) di Word utilizzi?

Hai provato a fare ricerche utilizzando la GUIDA (premi tasto F1) di Word ?
;-))

Se i problemi sono *SOLO* relativi a come accedere all'editor VBA, premi
contemporaneamente i tasti di scelta rapida "ALT+F11", dovresti ora
individuare (sulla sinistra) la cartella (se non la vedi, premi i tasti CTRL
+ R) "ThisDocument", fai doppio clic su quest'ultima e, sulla destra,
vedrai una schermata bianca, in cui devi "copiare" ed "incollare" il codice
(quello delimitato con '======= ...) che ti ho scritto.

Premi poi premi contemporaneamente i tasti di scelta rapida "ALT + Q" per
ritornare al foglio Word del tuo modello.

SALVA il documento come modello, dopo aver seguito le indicazioni che ti ho
gia' dato delle tre XXX....

Poi...... riesci a procedere da solo??? ;-)

PS: Quota correttamente : "La risposta va sempre dopo la parte quotata
(http://www.noidelweb.it/ipod/migliori/quotare.htm) o, se si deve rispondere
a più punti, inframezzata ad essa".

Ciao
Pippo
Emiliano
2007-11-18 16:09:01 UTC
Permalink
niente!!! non va!!!!
Post by Pippo
Post by Emiliano
Post by Pippo
NB: Nel tuo modello, nel punto dove vuoi compaia il numero progressivo,
scrivi XXX (tre ics consecutive, che devono essere le *uniche* presenti nel
tuo modello), poi salvalo nel formato modello "tuomodello.dot" (NB: NON
*.doc).
Prova poi, il codice seguente (ho provato a fare delle modifiche al codice
" THISDOCUMENT "
del progetto Visual Basic del tuo *modello*.
'=======================================
Option Explicit
Private Sub Document_New()
Dim strAppName As String
Dim strSection As String
Dim strKey As String
Dim strDefault As String
strAppName = "Luigi L"
strSection = "Test"
strKey = "Progressivo"
strDefault = "0"
SaveSetting strAppName _
, strSection _
, strKey _
, CLng(GetSetting(strAppName, strSection, strKey, strDefault)) _
+ 1
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "XXX"
.Replacement.Text = GetSetting(strAppName, strSection, strKey,
strDefault)
.Forward = True
.Wrap = wdFindContinue
.Format = True
.Execute Replace:=wdReplaceAll
End With
End Sub
'========================================
SALVA il tuo modello.
Apri un nuovo (menu File =>Nuovo..) documento sulla base del tuo modello e,
noterari che, al posto delle tre XXX compare il numero progressivo.
forse ho dimenticato di dirti che sono "un pollo" di Office....
Mi dovresti guidare passo-passo e vediamo se ci riusciamo....
attendo tua...
Se mi puoi spiegare i punti in cui hai difficolta' a seguire le mie
istruzione......;-)
Per fare quello che vuoi, occorre utilizzare una MACRO scritta (o copiata
:-)) ) nel linguaggio di programmazione Visual Basic.
Quale VERSIONE (io ho Word 2003) di Word utilizzi?
Hai provato a fare ricerche utilizzando la GUIDA (premi tasto F1) di Word ?
;-))
Se i problemi sono *SOLO* relativi a come accedere all'editor VBA, premi
contemporaneamente i tasti di scelta rapida "ALT+F11", dovresti ora
individuare (sulla sinistra) la cartella (se non la vedi, premi i tasti CTRL
+ R) "ThisDocument", fai doppio clic su quest'ultima e, sulla destra,
vedrai una schermata bianca, in cui devi "copiare" ed "incollare" il codice
(quello delimitato con '======= ...) che ti ho scritto.
Premi poi premi contemporaneamente i tasti di scelta rapida "ALT + Q" per
ritornare al foglio Word del tuo modello.
SALVA il documento come modello, dopo aver seguito le indicazioni che ti ho
gia' dato delle tre XXX....
Poi...... riesci a procedere da solo??? ;-)
PS: Quota correttamente : "La risposta va sempre dopo la parte quotata
(http://www.noidelweb.it/ipod/migliori/quotare.htm) o, se si deve rispondere
a più punti, inframezzata ad essa".
Ciao
Pippo
Pippo
2007-11-18 16:38:32 UTC
Permalink
Post by Emiliano
Post by Pippo
Hai provato a fare ricerche utilizzando la GUIDA (premi tasto F1) di Word ?
;-))
Se i problemi sono *SOLO* relativi a come accedere all'editor VBA, premi
contemporaneamente i tasti di scelta rapida "ALT+F11", dovresti ora
individuare (sulla sinistra) la cartella (se non la vedi, premi i tasti CTRL
+ R) "ThisDocument", fai doppio clic su quest'ultima e, sulla destra,
vedrai una schermata bianca, in cui devi "copiare" ed "incollare" il codice
(quello delimitato con '======= ...) che ti ho scritto.
Premi poi premi contemporaneamente i tasti di scelta rapida "ALT + Q" per
ritornare al foglio Word del tuo modello.
SALVA il documento come modello, dopo aver seguito le indicazioni che ti ho
gia' dato delle tre XXX....
Poi...... riesci a procedere da solo??? ;-)
niente!!! non va!!!!
Cosa non va? ;-)

Quale VERSIONE (io ho Word 2003) di WORD utilizzi?

Hai salvato il documento come modello (*.DOT e non *DOC)?

Hai poi aperto un nuovo documento (con File =>Nuovo...) e selezionato il
modello che hai precedentemente generato ed in cui hai copiato il codice VBA
ed inserito le tre XXX...?

PS: QUOTA correttamente : "La risposta va sempre dopo la parte quotata
(http://www.noidelweb.it/ipod/migliori/quotare.htm) o, se si deve
rispondere
a più punti, inframezzata ad essa".

Ciao
Pippo
Emiliano
2007-11-18 17:02:01 UTC
Permalink
***@HOTMAIL.IT

questo è il mio contatto msn...ti faccio vedere il .dot che ho generato.....
Post by Pippo
Post by Emiliano
Post by Pippo
Hai provato a fare ricerche utilizzando la GUIDA (premi tasto F1) di Word ?
;-))
Se i problemi sono *SOLO* relativi a come accedere all'editor VBA, premi
contemporaneamente i tasti di scelta rapida "ALT+F11", dovresti ora
individuare (sulla sinistra) la cartella (se non la vedi, premi i tasti CTRL
+ R) "ThisDocument", fai doppio clic su quest'ultima e, sulla destra,
vedrai una schermata bianca, in cui devi "copiare" ed "incollare" il codice
(quello delimitato con '======= ...) che ti ho scritto.
Premi poi premi contemporaneamente i tasti di scelta rapida "ALT + Q" per
ritornare al foglio Word del tuo modello.
SALVA il documento come modello, dopo aver seguito le indicazioni che ti ho
gia' dato delle tre XXX....
Poi...... riesci a procedere da solo??? ;-)
niente!!! non va!!!!
Cosa non va? ;-)
Quale VERSIONE (io ho Word 2003) di WORD utilizzi?
Hai salvato il documento come modello (*.DOT e non *DOC)?
Hai poi aperto un nuovo documento (con File =>Nuovo...) e selezionato il
modello che hai precedentemente generato ed in cui hai copiato il codice VBA
ed inserito le tre XXX...?
PS: QUOTA correttamente : "La risposta va sempre dopo la parte quotata
(http://www.noidelweb.it/ipod/migliori/quotare.htm) o, se si deve rispondere
a più punti, inframezzata ad essa".
Ciao
Pippo
Pippo
2007-11-18 17:32:05 UTC
Permalink
Post by Emiliano
questo è il mio contatto msn...ti faccio vedere il .dot che ho generato.....
Non ho messenger, pero' inviami il tuo modello al mio indirizzo mail :
"ghost . ghost chiocciola tin . it" (NB: due volte "ghost" col punto di
separazione).

Non hai ancora RISPOSTO pero', alle seguenti DOMANDE ;-) :

Quale VERSIONE (io ho Word 2003) di WORD utilizzi?

Hai salvato il documento come modello (*.DOT e non *DOC)?

Hai poi aperto un nuovo documento (con File =>Nuovo...) e selezionato il
modello che hai precedentemente generato ed in cui hai copiato il codice VBA
ed inserito le tre XXX...?

Inoltre, quando apri il nuovo documento (con File =>Nuovo...), nella scheda
"Modelli" =>"Generale" trovi il MODELLO che hai precedentemente generato
come ti ho spiegato?

Continui a non quotare correttamente... ;-))

PS: QUOTA correttamente : "La risposta va sempre dopo la parte quotata
(http://www.noidelweb.it/ipod/migliori/quotare.htm) o, se si deve
rispondere a più punti, inframezzata ad essa".

Ciao
Pippo
Maurizio Borrelli
2007-11-28 12:13:48 UTC
Permalink
Post by Pippo
Post by Emiliano
questo è il mio contatto msn...ti faccio vedere il .dot che ho generato.....
"ghost . ghost chiocciola tin . it" (NB: due volte "ghost" col punto di
separazione).
[...]
Post by Pippo
Continui a non quotare correttamente... ;-))
Ciao Pippo.

Mi hai evocato in mpioe ed eccomi qua. :)

Non so se Emiliano ancora ci legge, comunque la vedo dura dare una mano
a chi si limita a post del tipo "niente!!! non va!!!!". Vediamo un po'
che ci risponde adesso.

--
(Facci sapere se e eventualmente come hai risolto. Grazie.)

Ciao :o) Microsoft MVP (Excel)
Maurizio <http://mvp.support.microsoft.com/profile/Maurizio.Borrelli>
-------- Spazio personale di Maurizio Borrelli
?SPQR(C) <http://spdmb.spaces.live.com>
 X       RIO - Risorse in italiano per gli utenti di office
-------- <http://www.riolab.org>
Pippo
2007-11-28 18:04:15 UTC
Permalink
"Maurizio Borrelli" <***@freepass.it> ha scritto nel messaggio news:%***@TK2MSFTNGP04.phx.gbl...

[cut]
Post by Maurizio Borrelli
[...]
Mi hai evocato in mpioe ed eccomi qua. :)
Grazie Maurizio per la tua tempestiva disponibilita'! ;-)
Post by Maurizio Borrelli
Non so se Emiliano ancora ci legge, comunque la vedo dura dare una mano a
chi si limita a post del tipo "niente!!! non va!!!!". Vediamo un po' che
ci risponde adesso.
Nell'attesa di Emiliano, vorrei sapere, se le modifiche apportate alla *tua*
macro sono corrette e se si puo' fare di
meglio... ;-))

Inoltre, qualora sia necessario lavorare in *locale*, con piu' pc, quale
potrebbe essere una soluzione, per continuare ad avere la numerazione
*univoca* e *progressiva* per i documenti generati da uno *stesso* modello?

Chiedo troppo? ;-)

Ciao e grazie milleeee
Pippo
Maurizio Borrelli
2007-11-28 20:12:19 UTC
Permalink
[...]

(A)
Post by Pippo
vorrei sapere, se le modifiche apportate alla
*tua* macro sono corrette e se si puo' fare di
meglio... ;-))
(B)
Post by Pippo
Inoltre, qualora sia necessario lavorare in *locale*, con piu' pc, quale
potrebbe essere una soluzione, per continuare ad avere la numerazione
*univoca* e *progressiva* per i documenti generati da uno *stesso* modello?
[...]

Ciao Pippo.

Il codice che postai nel 3D da te citato si riferiva unicamente alla
possibilita' di memorizzare (leggere, scrivere, incrementare) un numero
progressivo in una chiave del registro di Windows. Solo il primo
"mattone" del discorso affrontato in questo 3D.

L'altra questione e' come usare questo numero: come parte del nome del
documento e/o come testo nel documento.

Vedo che tu hai escogitato una soluzione... pruriginosa... sostituendo
il testo "XXX" col numero. Ho capito bene?

Io preferisco invece una soluzione forse piu' laboriosa ma, credo, piu'
affidabile. Memorizzerei il numero in una proprieta' del documento,
quindi ovunque nel documento io voglia ottenere tale numero userei un
codice di campo:

1. Si crea il modello.

2. Si crea una proprieta' del documento (es: "NumProgr") destinata a
essere valorizzata col numero progressivo.

3. Dove necessario, si immettono nel testo del modello i codici di campo
che fanno riferimento alla proprieta' del documento "NumProgr":

{ DOCPROPERTY NumProgr }

4. Si salva il modello.

5. Alla creazione di un nuovo documento basato sul modello si legge
(GetSetting) il valore della chiave del registro di Windows e lo si
assegna a una variabile (es: strNumProgr).

6. Si assegna tale valore alla proprieta' "NumProgr":

ThisDocument.CustomDocumentProperties("NumProgr").Value = strNumProgr

7. Si aggiornano tutti i codici di campo.

Che ne dici?

Della questione (B) ne potremo riparlare in seguito, ok?

--
Ciao :o) Microsoft MVP (Excel)
Maurizio <http://mvp.support.microsoft.com/profile/Maurizio.Borrelli>
-------- Spazio personale di Maurizio Borrelli
?SPQR(C) <http://spdmb.spaces.live.com>
 X       RIO - Risorse in italiano per gli utenti di office
-------- <http://www.riolab.org>
Pippo
2007-11-28 21:09:34 UTC
Permalink
[...]
(A)
Post by Pippo
vorrei sapere, se le modifiche apportate alla
*tua* macro sono corrette e se si puo' fare di
meglio... ;-))
(B)
Post by Pippo
Inoltre, qualora sia necessario lavorare in *locale*, con piu' pc, quale
potrebbe essere una soluzione, per continuare ad avere la numerazione
*univoca* e *progressiva* per i documenti generati da uno *stesso* modello?
Vedo che tu hai escogitato una soluzione... pruriginosa... sostituendo il
testo "XXX" col numero. Ho capito bene?
Hai capito benissimo,..purtroppo, non avendo conoscenze approfondite di vba
per word (e di word), in mancanza di altri interventi nel thread, pur di
dare un aiuto, ho pensato ad una soluzione (che mi sembra funzionante), ben
consapevole pero', *non* essere certamente la migliore (da tutti i punti di
vista)!
Io preferisco invece una soluzione forse piu' laboriosa ma, credo, piu'
affidabile. Memorizzerei il numero in una proprieta' del documento, quindi
ovunque nel documento io voglia ottenere tale numero userei un codice di
1. Si crea il modello.
2. Si crea una proprieta' del documento (es: "NumProgr") destinata a
essere valorizzata col numero progressivo.
Da codice?
3. Dove necessario, si immettono nel testo del modello i codici di campo
{ DOCPROPERTY NumProgr }
4. Si salva il modello.
5. Alla creazione di un nuovo documento basato sul modello si legge
(GetSetting) il valore della chiave del registro di Windows e lo si
assegna a una variabile (es: strNumProgr).
ThisDocument.CustomDocumentProperties("NumProgr").Value = strNumProgr
7. Si aggiornano tutti i codici di campo.
Che ne dici?
Dico che hai sicuramente ragione (mi fido ciecamente.. :-))..), ma
purtroppo, come gia' detto, *non* avendo conoscenze approfondite di vba per
word (e di word), non credo di riuscire a scrivere il "codice" sulla base
dei tuoi *preziosi* suggerimenti, almeno in tempi brevi.... :-(((
Della questione (B) ne potremo riparlare in seguito, ok?
OK! ;-).... (mi sa che si tratta di un qualcosa di non tanto semplice..
:-)..)

Un' ultima (forse ;-)) richiesta: ti ho chiamato in causa, anche in questo
thread http://tinyurl.com/2jy6y8 (mpioe), dove, gradirei, un tuo intervento
chiarificatore.... :-)

Ciao e grazie milleeeee
Pippo
Maurizio Borrelli
2007-11-28 22:37:58 UTC
Permalink
[...]
Post by Maurizio Borrelli
Post by Maurizio Borrelli
(A)
Post by Pippo
vorrei sapere, se le modifiche apportate alla
*tua* macro sono corrette e se si puo' fare di
meglio... ;-))
[...]
Post by Maurizio Borrelli
Post by Maurizio Borrelli
Vedo che tu hai escogitato una soluzione... pruriginosa... sostituendo
il testo "XXX" col numero. Ho capito bene?
Hai capito benissimo,..purtroppo, non avendo conoscenze approfondite di vba
per word (e di word), in mancanza di altri interventi nel thread, pur di
dare un aiuto, ho pensato ad una soluzione (che mi sembra funzionante), ben
consapevole pero', *non* essere certamente la migliore (da tutti i punti
di vista)!
Post by Maurizio Borrelli
Io preferisco invece una soluzione forse piu' laboriosa ma, credo, piu'
affidabile. Memorizzerei il numero in una proprieta' del documento, quindi
ovunque nel documento io voglia ottenere tale numero userei un codice
1. Si crea il modello.
2. Si crea una proprieta' del documento (es: "NumProgr") destinata a
essere valorizzata col numero progressivo.
Da codice?
Non necessariamente. Anche a mano va benissimo.
Post by Maurizio Borrelli
Post by Maurizio Borrelli
3. Dove necessario, si immettono nel testo del modello i codici di campo
{ DOCPROPERTY NumProgr }
A mano anche questo.
Post by Maurizio Borrelli
Post by Maurizio Borrelli
4. Si salva il modello.
5. Alla creazione di un nuovo documento basato sul modello si legge
(GetSetting) il valore della chiave del registro di Windows e lo si
assegna a una variabile (es: strNumProgr).
ThisDocument.CustomDocumentProperties("NumProgr").Value = strNumProgr
7. Si aggiornano tutti i codici di campo.
Che ne dici?
Dico che hai sicuramente ragione (mi fido ciecamente.. :-))..), ma
purtroppo, come gia' detto, *non* avendo conoscenze approfondite di vba per
word (e di word), non credo di riuscire a scrivere il "codice" sulla base
dei tuoi *preziosi* suggerimenti, almeno in tempi brevi.... :-(((
[...]

Ciao Pippo.

Non c'e' problema. Il codice gia' lo stiamo scrivendo. Quanto sopra
serve appunto per verificare se intendiamo la stessa cosa, prima di
tradurre in codice. L'importante e' che i punti che ho indicato siano
chiari. E' anche opportuno verificare alcuni singoli passi. Per esempio
hai gia' provato a creare (non con un modello ma in un documento) la
proprieta' che ho chiamato "NumProgr"? E a modificarne il valore? Questi
sono i test utili e necessarii prima di passare alla scrittura del
codice. Io almeno di solito faccio queste prove, prima di mettermi a
scrivere. Intendo, per esempio, il digitare nella Finestra immediata:

ThisDocument.CustomDocumentProperties("NumProgr").Value = "2"

Poi, sempre in quella finestra, digitare:

?ThisDocument.CustomDocumentProperties("NumProgr").Value

e vedere se si ottiene "2".

Quindi aggiornare tutti i campi e verificare che compaia il valore "2".

--
Ciao :o) Microsoft MVP (Excel)
Maurizio <http://mvp.support.microsoft.com/profile/Maurizio.Borrelli>
-------- Spazio personale di Maurizio Borrelli
?SPQR(C) <http://spdmb.spaces.live.com>
 X       RIO - Risorse in italiano per gli utenti di office
-------- <http://www.riolab.org>
Pippo
2007-11-28 23:36:58 UTC
Permalink
"Maurizio Borrelli" <***@freepass.it> ha scritto nel messaggio news:***@TK2MSFTNGP04.phx.gbl...

[cut]
Post by Maurizio Borrelli
Post by Pippo
Post by Maurizio Borrelli
Io preferisco invece una soluzione forse piu' laboriosa ma, credo, piu'
affidabile. Memorizzerei il numero in una proprieta' del documento, quindi
ovunque nel documento io voglia ottenere tale numero userei un codice
1. Si crea il modello.
2. Si crea una proprieta' del documento (es: "NumProgr") destinata a
essere valorizzata col numero progressivo.
Da codice?
Non necessariamente. Anche a mano va benissimo.
Ok, Excel2003: dal menu file => proprieta' => personalizza, definisco la
proprieta':

Nome: NumProgr

Tipo: Numero

Valore: 0

... e clicco su "Aggiungi"
Post by Maurizio Borrelli
Post by Pippo
Post by Maurizio Borrelli
3. Dove necessario, si immettono nel testo del modello i codici di campo
{ DOCPROPERTY NumProgr }
A mano anche questo.
OK! Fatto! (nel menu di scelta dei tipi di campo, mi ritrovo la proprieta'
"NumProgr" sopra definita)
Post by Maurizio Borrelli
Post by Pippo
Post by Maurizio Borrelli
4. Si salva il modello.
5. Alla creazione di un nuovo documento basato sul modello si legge
(GetSetting) il valore della chiave del registro di Windows e lo si
assegna a una variabile (es: strNumProgr).
ThisDocument.CustomDocumentProperties("NumProgr").Value = strNumProgr
7. Si aggiornano tutti i codici di campo.
Non c'e' problema. Il codice gia' lo stiamo scrivendo.
Perfetto!
Post by Maurizio Borrelli
Quanto sopra serve appunto per verificare se intendiamo la stessa cosa,
prima di tradurre in codice. L'importante e' che i punti che ho indicato
siano chiari. E' anche opportuno verificare alcuni singoli passi. Per
esempio hai gia' provato a creare (non con un modello ma in un documento)
la proprieta' che ho chiamato "NumProgr"? E a modificarne il valore? Questi
sono i test utili e necessarii prima di passare alla scrittura del codice.
Io almeno di solito faccio queste prove, prima di mettermi a scrivere.
ThisDocument.CustomDocumentProperties("NumProgr").Value = "2"
OK!
Post by Maurizio Borrelli
?ThisDocument.CustomDocumentProperties("NumProgr").Value
e vedere se si ottiene "2".
OK, perfetto! Siamo in linea! :-))
Post by Maurizio Borrelli
Quindi aggiornare tutti i campi e verificare che compaia il valore "2".
Grande! Funziona!

Aspetto ulteriori istruzioni.... ;-))

PS: come mai non mi hai fatto partire dal modello?

Ciao e grazie milleeeeee
Pippo
Maurizio Borrelli
2007-11-29 00:03:15 UTC
Permalink
[...]
Post by Pippo
Post by Maurizio Borrelli
Quindi aggiornare tutti i campi e verificare che compaia il valore
"2".
Grande! Funziona!
Aspetto ulteriori istruzioni.... ;-))
PS: come mai non mi hai fatto partire dal modello?
Ciao Pippo.

Perche' un documento "funziona", mentre un modello... "funzionera'".
Funzionera' quando creeremo un documento basato su quel modello. Inoltre
il documento potra' essere salvato come modello. E, da una certa
versione di Word in poi (2000?), si possono creare anche documenti
basati su altri documenti (usati come modelli).

--
Ciao :o) Microsoft MVP (Excel)
Maurizio <https://mvp.support.microsoft.com/profile/Maurizio.Borrelli>
-------- Spazio personale di Maurizio Borrelli
?SPQR(C) <http://spdmb.spaces.live.com>
 X       RIO - Risorse in italiano per gli utenti di office
-------- <http://www.riolab.org>
Pippo
2007-11-29 00:25:38 UTC
Permalink
Post by Maurizio Borrelli
Post by Pippo
Post by Maurizio Borrelli
Quindi aggiornare tutti i campi e verificare che compaia il valore
"2".
Grande! Funziona!
Aspetto ulteriori istruzioni.... ;-))
PS: come mai non mi hai fatto partire dal modello?
Perche' un documento "funziona", mentre un modello... "funzionera'".
Funzionera' quando creeremo un documento basato su quel modello.
*Grazie* Maurizio, appena possibile (la stanchezza incomincia a farsi
sentire..) provero' a scrivere il codice sulla base dei tuoi suggerimenti
(non mi abbandonare :-)) ).
Post by Maurizio Borrelli
Inoltre il documento potra' essere salvato come modello.
OK!
Post by Maurizio Borrelli
E, da una certa versione di Word in poi (2000?), si possono creare anche
documenti basati su altri documenti (usati come modelli).
Non ho ben capito!?..Sara' la stanchezza? ;-)

Ciao e grazie 100000000000..
Pippo
Maurizio Borrelli
2007-11-29 11:09:47 UTC
Permalink
[...]
Post by Pippo
Post by Maurizio Borrelli
E, da una certa versione di Word in poi (2000?), si possono creare
anche documenti basati su altri documenti (usati come modelli).
Non ho ben capito!?..Sara' la stanchezza? ;-)
Ciao Pippo.

Esempio (Word 2003):

File > Nuovo...

e compare il riquadro "Nuovo documento" in cui sono elencate le seguenti
opzioni:

----------
Nuovo
. Documento nuovo
. Documento XML
. Pagina WEB
. Messaggio di posta elettronica
. Da documento esistente... <<-- osserva questo!
Modelli
[...]
----------

Ho verificato e rettifico: la possibilita' di creare documenti basati su
documenti esistenti fa la sua comparsa con Office XP (2002) e non 2000.
Fino alla versione 2000 compresa, perche' un documento potesse essere
usato come modello era necessario che fosse salvato come modello;
addirittura non era nemmeno sufficiente modificarne l'estensione da
".doc" a ".dot", in quanto non sarebbe comunque apparso nella finestra
"Nuovo" dalla quale v'era la possibilita' di scegliere il modello (o
l'autocomposizione/wizard) su cui basare il documento.

--
Ciao :o) Microsoft MVP (Excel)
Maurizio https://mvp.support.microsoft.com/profile/Maurizio.Borrelli
-------- Spazio personale di Maurizio Borrelli
?SPQR(C) http://spdmb.spaces.live.com
 X       RIO - Risorse in italiano per gli utenti di office
-------- http://www.riolab.org
Pippo
2007-11-29 18:41:11 UTC
Permalink
Post by Pippo
Post by Maurizio Borrelli
Post by Pippo
Aspetto ulteriori istruzioni.... ;-))
PS: come mai non mi hai fatto partire dal modello?
Perche' un documento "funziona", mentre un modello... "funzionera'".
Funzionera' quando creeremo un documento basato su quel modello.
*Grazie* Maurizio, appena possibile (la stanchezza incomincia a farsi
sentire..) provero' a scrivere il codice sulla base dei tuoi suggerimenti
(non mi abbandonare :-)) ).
Ecco il codice modificato sulla base dei *tuoi preziosi suggerimenti*, che
ho incollato nel modulo:

" ThisDocument "

del progetto Visual Basic del *modello* (*.dot) creato.


'=================================================

Private Sub Document_New()

Dim strAppName As String
Dim strSection As String
Dim strKey As String
Dim strDefault As String


strAppName = "Maurizio"
strSection = "Test"
strKey = "Progressivo"
strDefault = "0"
SaveSetting strAppName _
, strSection _
, strKey _
, CLng(GetSetting(strAppName, strSection, strKey, strDefault)) _
+ 1

With ActiveDocument

.CustomDocumentProperties("NumProgr").Value = _
CLng(GetSetting(strAppName, strSection, strKey, strDefault))

.Fields.Update

End With

'===================================================

Cosa ne pensi?

Sembra funzionare......

Si puo' ancora migliorare?

Ho notato che, con il registratore di macro attivo, non sempre e' possibile
eseguire alcune operazioni da registrare, ad es., volendo registrare
l'azione di aggiornamento "campo", il puntatore del mouse, assume la forma
di una "cassettina" e non mi viene consentito di fare "clic" dx sul "campo
codice" per selezionare "aggiorna campo": sara' un baco di word2003?

Maurizio, quando ti e' possibile, *riprendiamo* (magari procedendo per gradi
allo stesso modo del punto A) anche il seguente punto B? ;-))

(B)
Inoltre, qualora sia necessario lavorare in *locale*, con piu' pc, quale
potrebbe essere una soluzione, per continuare ad avere la numerazione
*univoca* e *progressiva* per i documenti generati da uno *stesso*
modello?

Suggerimenti? ;-)

Da dove partire?

Ho l'impressione che non sia cosi' semplice da fare.....

Una mia idea era quella di utilizzare un file di testo esterno, es.
"numprogr.txt", in cui salvare (tramite codice vbscript, che cmq *non*
conosco) il "progressivo", ma cio' implica, di trasportare il file
"numprogr.txt", su un pc o su un altro a seconda delle esigenze.... uhm.. la
vedo dura... :-((

Ciao e grazie milleeee
Pippo
Maurizio Borrelli
2007-11-29 21:58:32 UTC
Permalink
(1)
Post by Pippo
Ecco il codice modificato
[...]
Post by Pippo
" ThisDocument "
del progetto Visual Basic del *modello* (*.dot) creato.
'=================================================
Private Sub Document_New()
Dim strAppName As String
Dim strSection As String
Dim strKey As String
Dim strDefault As String
strAppName = "Maurizio"
strSection = "Test"
strKey = "Progressivo"
strDefault = "0"
SaveSetting strAppName _
, strSection _
, strKey _
, CLng(GetSetting(strAppName, strSection, strKey, strDefault)) _
+ 1
With ActiveDocument
.CustomDocumentProperties("NumProgr").Value = _
CLng(GetSetting(strAppName, strSection, strKey, strDefault))
.Fields.Update
End With
'===================================================
Cosa ne pensi?
Sembra funzionare......
Si puo' ancora migliorare?
(2)
Post by Pippo
Ho notato che, con il registratore di macro attivo, non sempre e'
possibile eseguire alcune operazioni da registrare, ad es., volendo registrare
l'azione di aggiornamento "campo", il puntatore del mouse, assume la
forma di una "cassettina" e non mi viene consentito di fare "clic" dx sul
"campo codice" per selezionare "aggiorna campo": sara' un baco di word2003?
Maurizio, quando ti e' possibile, *riprendiamo* (magari procedendo per
gradi allo stesso modo del punto A) anche il seguente punto B? ;-))
(B)
Post by Pippo
Inoltre, qualora sia necessario lavorare in *locale*, con piu' pc,
quale potrebbe essere una soluzione, per continuare ad avere la numerazione
*univoca* e *progressiva* per i documenti generati da uno *stesso*
modello?
Suggerimenti? ;-)
Da dove partire?
Ho l'impressione che non sia cosi' semplice da fare.....
Una mia idea era quella di utilizzare un file di testo esterno, es.
"numprogr.txt", in cui salvare (tramite codice vbscript, che cmq *non*
conosco) il "progressivo", ma cio' implica, di trasportare il file
"numprogr.txt", su un pc o su un altro a seconda delle esigenze....
uhm.. la vedo dura... :-((
Ciao Pippo.

(1)
Direi che ci siamo! La struttura e' quella. Proviamo pero' a riflettere
su cosa fa effettivamente il codice che hai postato e vediamo se fa
proprio cio' che sta bene a noi. Ogni volta che si crea un nuovo
documento basato su quel modello viene letto il valore di una certa
chiave del registro, ne viene incrementato il valore che viene quindi
assegnato a una certa proprieta' del nuovo documento. Che succede se
l'utente chiude tale nuovo documento senza salvare? Ovvero rinunzia alla
creazione. Che otteniamo dei buchi nella numerazione, giusto? Ci sta
bene questo? E se volessimo, da piu' pc, generare una numerazione
progressiva di gruppo? (Ecco la sezione B che avevo accantonato la volta
scorsa...). Non potremo piu' memorizzare il contatore nel registro. Il
file "numprogr.txt" di cui parli andrebbe benissimo (con le dovute
cautele che potremmo analizzare) e "appoggiandolo" in una cartella
condivisa accessibile da tutti gli utenti che ne hanno bisogno non
sarebbe necessario il trasporto di cui parli.

(2)
Sta scritto (ma non ricordo dove) che il registratore di macro non va
usato col mouse ma solo con la tastiera.

--
Ciao :o) Microsoft MVP (Excel)
Maurizio https://mvp.support.microsoft.com/profile/Maurizio.Borrelli
-------- Spazio personale di Maurizio Borrelli
?SPQR(C) http://spdmb.spaces.live.com
 X       RIO - Risorse in italiano per gli utenti di office
-------- http://www.riolab.org
Pippo
2007-11-29 23:01:52 UTC
Permalink
(1)
Post by Pippo
Ecco il codice modificato
[...]
Post by Pippo
" ThisDocument "
del progetto Visual Basic del *modello* (*.dot) creato.
'=================================================
Private Sub Document_New()
Dim strAppName As String
Dim strSection As String
Dim strKey As String
Dim strDefault As String
strAppName = "Maurizio"
strSection = "Test"
strKey = "Progressivo"
strDefault = "0"
SaveSetting strAppName _
, strSection _
, strKey _
, CLng(GetSetting(strAppName, strSection, strKey, strDefault)) _
+ 1
With ActiveDocument
.CustomDocumentProperties("NumProgr").Value = _
CLng(GetSetting(strAppName, strSection, strKey, strDefault))
.Fields.Update
End With
'===================================================
Cosa ne pensi?
Sembra funzionare......
Si puo' ancora migliorare?
(2)
Post by Pippo
Ho notato che, con il registratore di macro attivo, non sempre e'
possibile eseguire alcune operazioni da registrare, ad es., volendo registrare
l'azione di aggiornamento "campo", il puntatore del mouse, assume la
forma di una "cassettina" e non mi viene consentito di fare "clic" dx sul
"campo codice" per selezionare "aggiorna campo": sara' un baco di word2003?
Maurizio, quando ti e' possibile, *riprendiamo* (magari procedendo per
gradi allo stesso modo del punto A) anche il seguente punto B? ;-))
(B)
Post by Pippo
Inoltre, qualora sia necessario lavorare in *locale*, con piu' pc,
quale potrebbe essere una soluzione, per continuare ad avere la numerazione
*univoca* e *progressiva* per i documenti generati da uno *stesso*
modello?
Suggerimenti? ;-)
Da dove partire?
Ho l'impressione che non sia cosi' semplice da fare.....
Una mia idea era quella di utilizzare un file di testo esterno, es.
"numprogr.txt", in cui salvare (tramite codice vbscript, che cmq *non*
conosco) il "progressivo", ma cio' implica, di trasportare il file
"numprogr.txt", su un pc o su un altro a seconda delle esigenze....
uhm.. la vedo dura... :-((
(1)
Direi che ci siamo! La struttura e' quella. Proviamo pero' a riflettere su
cosa fa effettivamente il codice che hai postato e vediamo se fa proprio
cio' che sta bene a noi. Ogni volta che si crea un nuovo documento basato
su quel modello viene letto il valore di una certa chiave del registro, ne
viene incrementato il valore che viene quindi assegnato a una certa
proprieta' del nuovo documento. Che succede se l'utente chiude tale nuovo
documento senza salvare? Ovvero rinunzia alla creazione.
Che otteniamo dei buchi nella numerazione, giusto?
Accidenti! Certo!

Quindi, bisogna accertarsi, se, il "documento" creato sulla base del
modello, sia stato *salvato*!
Come fare ?

Per verificare se il documento e' stato salvato, avrei pensato ad un
controllo del tipo:

If ActiveDocument.Path <> "" Then ....

..poi.. dove piazzare la suddetta istruzione? Evento "Close" ?

Mi dai qualche suggerimento? ;-))
Ci sta bene questo?
NOOO! :-((
E se volessimo, da piu' pc, generare una numerazione progressiva di
gruppo? (Ecco la sezione B che avevo accantonato la volta scorsa...). Non
potremo piu' memorizzare il contatore nel registro.
La "numerazione" non andrebbe a memorizzarsi nel registro del server?
Cioe', lo stesso modello viene condiviso da piu' utenti e, le "numerazioni",
vengono registrate, utilizando il suddetto codice (da modificare), sul
server.

Non ho esperienza di programmazione per pc in rete, quindi, sicuramente
avro' detto delle cavolate... :-((
Il file "numprogr.txt" di cui parli andrebbe benissimo (con le dovute
cautele che potremmo analizzare) e "appoggiandolo" in una cartella
condivisa accessibile da tutti gli utenti che ne hanno bisogno non sarebbe
necessario il trasporto di cui parli.
Io pero', mi riferivo a piu' pc che lavorano in *locale* (un pc ubicato in
magazzino, un altro a casa, ma non connessi in rete), *non* collegati in
rete, cmq e' interessante anche il caso di pc collegati in rete.
(2)
Sta scritto (ma non ricordo dove) che il registratore di macro non va
usato col mouse ma solo con la tastiera.
OK, provo a dare uno sguardo alla guida!

Ciao e grazie mille per la disponibilita' e competenza!
Pippo
Pippo
2007-11-30 00:18:25 UTC
Permalink
----- Original Message -----
From: "Pippo" <***@nospam.it>
Newsgroups: microsoft.public.it.office.word
Sent: Friday, November 30, 2007 12:01 AM
Subject: Re: Numero progressivo in word
Post by Pippo
Post by Maurizio Borrelli
(1)
Post by Pippo
Ecco il codice modificato
[...]
Post by Pippo
" ThisDocument "
del progetto Visual Basic del *modello* (*.dot) creato.
'=================================================
Private Sub Document_New()
Dim strAppName As String
Dim strSection As String
Dim strKey As String
Dim strDefault As String
strAppName = "Maurizio"
strSection = "Test"
strKey = "Progressivo"
strDefault = "0"
SaveSetting strAppName _
, strSection _
, strKey _
, CLng(GetSetting(strAppName, strSection, strKey, strDefault)) _
+ 1
With ActiveDocument
.CustomDocumentProperties("NumProgr").Value = _
CLng(GetSetting(strAppName, strSection, strKey, strDefault))
.Fields.Update
End With
'===================================================
Cosa ne pensi?
Sembra funzionare......
Si puo' ancora migliorare?
(1)
Direi che ci siamo! La struttura e' quella. Proviamo pero' a riflettere
su cosa fa effettivamente il codice che hai postato e vediamo se fa
proprio cio' che sta bene a noi. Ogni volta che si crea un nuovo
documento basato su quel modello viene letto il valore di una certa
chiave del registro, ne viene incrementato il valore che viene quindi
assegnato a una certa proprieta' del nuovo documento. Che succede se
l'utente chiude tale nuovo documento senza salvare? Ovvero rinunzia alla
creazione.
Che otteniamo dei buchi nella numerazione, giusto?
Accidenti! Certo!
Quindi, bisogna accertarsi, se, il "documento" creato sulla base del
modello, sia stato *salvato*!
Come fare ?
Per verificare se il documento e' stato salvato, avrei pensato ad un
If ActiveDocument.Path <> "" Then ....
oppure: If ActiveDocument.Saved = False Then...

uhm..pero', debbo anche verificare che, il documento "attivo", non e' un
qualsiasi documento, ma e' *proprio* quello basato sul mio *modello* !!!

Giusto?
Post by Pippo
..poi.. dove piazzare la suddetta istruzione? Evento "Close" ?
Mi dai qualche suggerimento? ;-))
Post by Maurizio Borrelli
Ci sta bene questo?
NOOO! :-((
Ciao e grazie milleee
Pippo
Giovanni Zezza
2007-11-30 10:44:42 UTC
Permalink
Post by Pippo
oppure: If ActiveDocument.Saved = False Then...
uhm..pero', debbo anche verificare che, il documento "attivo", non e' un
qualsiasi documento, ma e' *proprio* quello basato sul mio *modello* !!!
Giusto?
Post by Pippo
..poi.. dove piazzare la suddetta istruzione? Evento "Close" ?
Non è meglio stabilire un'azione specifica ("registrazione a protocollo")?:
prima il documento viene creato e salvato, quindi si decide se
effettivamente sia il caso di protocollarlo, e a quel punto i giochi sono
fatti in modo definitivo, senza necessità di ulteriori controlli.

In pratica, puoi aggiungere un pulsante o una voce di menu "Protocollo" che
gestisca l'operazione. La voce sarà attiva solo per i documenti basati su
quel modello, e solo per documenti ancora da protocollare (la prima
condizione è più o meno automatica, per la seconda si tratta di registrare
da qualche parte nel documento lo stato rispetto al protocollo).

L'evento Close di documenti non protocollati potrebbe evetualmente essere
usato per ricordare all'utente di effettuare l'operazione (ma, direi, NON
per farla automaticamente: rendere consapevole l'utente dell'operazione mi
sembra più sicuro).

Ciao.
Maurizio Borrelli
2007-12-06 18:24:02 UTC
Permalink
Post by Pippo
----- Original Message -----
From: "Pippo"
Newsgroups: microsoft.public.it.office.word
Sent: Friday, November 30, 2007 12:01 AM
Subject: Re: Numero progressivo in word
[...]
Post by Pippo
Post by Pippo
Post by Maurizio Borrelli
Che otteniamo dei buchi nella numerazione, giusto?
Accidenti! Certo!
Post by Pippo
Quindi, bisogna accertarsi, se, il "documento" creato sulla base del
modello, sia stato *salvato*!
Come fare ?
Post by Pippo
Per verificare se il documento e' stato salvato, avrei pensato ad un
If ActiveDocument.Path <> "" Then ....
oppure: If ActiveDocument.Saved = False Then...
uhm..pero', debbo anche verificare che, il documento "attivo", non e' un
qualsiasi documento, ma e' *proprio* quello basato sul mio *modello* !!!
Giusto?
Post by Pippo
..poi.. dove piazzare la suddetta istruzione? Evento "Close" ?
Mi dai qualche suggerimento? ;-))
Post by Maurizio Borrelli
Ci sta bene questo?
NOOO! :-((
Ciao Pippo.

Ho appena postato questo:

http://groups.google.it/group/microsoft.public.it.office.word/browse_frm/thread/90eb646ddde8abb4

Contiene del codice utile al nostro discorso che, come vedi, non ho
interrotto. Solo stavo meditando su come... diluire le diverse
problematiche riguardanti l'oggetto.

Una di queste era proprio la risposta al tuo "dove piazzare... ?", che
puoi vedere nel post di cui al collegamento. Se vuoi potremmo
(ri)partire da quel piccolissimo progetto.

--
Ciao :o) Microsoft MVP (Excel)
Maurizio https://mvp.support.microsoft.com/profile/Maurizio.Borrelli
-------- Spazio personale di Maurizio Borrelli
?SPQR(C) http://spdmb.spaces.live.com
 X       RIO - Risorse in italiano per gli utenti di office
-------- http://www.riolab.org
Pippo
2007-12-06 22:01:33 UTC
Permalink
"Pippo" wrote in message
Post by Pippo
Post by Pippo
Post by Maurizio Borrelli
Che otteniamo dei buchi nella numerazione, giusto?
Accidenti! Certo!
Post by Pippo
Quindi, bisogna accertarsi, se, il "documento" creato sulla base del
modello, sia stato *salvato*!
Come fare ?
Post by Pippo
Per verificare se il documento e' stato salvato, avrei pensato ad un
If ActiveDocument.Path <> "" Then ....
oppure: If ActiveDocument.Saved = False Then...
uhm..pero', debbo anche verificare che, il documento "attivo", non e' un
qualsiasi documento, ma e' *proprio* quello basato sul mio *modello* !!!
Giusto?
Post by Pippo
..poi.. dove piazzare la suddetta istruzione? Evento "Close" ?
Mi dai qualche suggerimento? ;-))
Post by Maurizio Borrelli
Ci sta bene questo?
NOOO! :-((
http://groups.google.it/group/microsoft.public.it.office.word/browse_frm/thread/90eb646ddde8abb4
Gulp! :-((
Contiene del codice utile al nostro discorso che, come vedi, non ho
interrotto. Solo stavo meditando su come... diluire le diverse
problematiche riguardanti l'oggetto.
Una di queste era proprio la risposta al tuo "dove piazzare... ?", che
puoi vedere nel post di cui al collegamento.
Se vuoi potremmo (ri)partire da quel piccolissimo progetto.
Certamente,.. pero', ho iniziato a dare uno sguardo al link che hai
evidenziato e, purtroppo, *non* sono riuscito a capire molto bene, *almeno*
l'algoritmo: causa, molto probabilmente, la mia *bassa* conoscenza di vba
per word.

Attendo, se hai mooolta *pazienza*, un qualche tuo lume..... ;-)

Ciao e grazie mille per l'infinita disponibilita'!
Pippo
Maurizio Borrelli
2007-12-06 22:25:48 UTC
Permalink
Post by Pippo
Post by Maurizio Borrelli
http://groups.google.it/group/microsoft.public.it.office.word/browse_frm
/thread/90eb646ddde8abb4
Certamente,.. pero', ho iniziato a dare uno sguardo al link che hai
evidenziato e, purtroppo, *non* sono riuscito a capire molto bene,
*almeno* l'algoritmo: causa, molto probabilmente, la mia *bassa*
conoscenza di vba per word.
Attendo, se hai mooolta *pazienza*, un qualche tuo lume..... ;-)
Ciao Pippo.

No, niente lumi... ma a domanda, se posso, rispondo. ;-)

La prima cosa che ci dovresti dire e' se "gira", ovvero se riesci a
farlo "girare".

--
Ciao :o) Microsoft MVP (Excel)
Maurizio https://mvp.support.microsoft.com/profile/Maurizio.Borrelli
-------- Spazio personale di Maurizio Borrelli
?SPQR(C) http://spdmb.spaces.live.com
 X       RIO - Risorse in italiano per gli utenti di office
-------- http://www.riolab.org
Pippo
2007-12-07 00:09:41 UTC
Permalink
Post by Maurizio Borrelli
Post by Pippo
Certamente,.. pero', ho iniziato a dare uno sguardo al link che hai
evidenziato e, purtroppo, *non* sono riuscito a capire molto bene,
*almeno* l'algoritmo: causa, molto probabilmente, la mia *bassa*
conoscenza di vba per word.
Attendo, se hai mooolta *pazienza*, un qualche tuo lume..... ;-)
No, niente lumi... ma a domanda, se posso, rispondo. ;-)
La prima cosa che ci dovresti dire e' se "gira", ovvero se riesci a farlo
"girare".
Si', pero', per "girare", ho dovuto impostare (utilizzo "word 2003") il
livello di protezione macro da "Medio" a "BASSO".
Quanto sopra, se non ho commesso errori, potrebbe essere un punto *debole*?
;-)

Forse la macro "Autoexec"(di "esecuzione automatica"), richiede il suddetto
livello (BASSO) di protezione?

Chiaramente, mi sono semplicemente limitato al "copia-incolla", del tuo
codice, dal link che hai segnalato, (seguendo le tue istruzioni su *dove*
inserire il codice)....

Qualche altro suggerimento? ;-))..Uno spunto?.. (Io ci provo sempre.. :-))
...)

Ciao e grazie milleeeee
Pippo
Maurizio Borrelli
2007-12-07 09:50:13 UTC
Permalink
Post by Pippo
Post by Maurizio Borrelli
Post by Pippo
Certamente,.. pero', ho iniziato a dare uno sguardo al link che hai
evidenziato e, purtroppo, *non* sono riuscito a capire molto bene,
*almeno* l'algoritmo: causa, molto probabilmente, la mia *bassa*
conoscenza di vba per word.
Attendo, se hai mooolta *pazienza*, un qualche tuo lume..... ;-)
No, niente lumi... ma a domanda, se posso, rispondo. ;-)
La prima cosa che ci dovresti dire e' se "gira", ovvero se riesci a
farlo "girare".
Si', pero', per "girare", ho dovuto impostare (utilizzo "word 2003") il
livello di protezione macro da "Medio" a "BASSO".
Quanto sopra, se non ho commesso errori, potrebbe essere un punto *debole*?
;-)
[...]

Ciao Pippo.

Punto debole di cosa? O meglio... di chi? ;-)

Non ho verificato con Word 2003 ma solo con Word 2000 e 2007 i quali
sono entrambi impostati con protezione "Media" e non ottengo avvisi.

La cosa piu' probabile e' che il modello generato da te non sia
considerato attendibile dal tuo Word 2003. Se non ricordo male, sta
scritto (da qualche parte) che sono considerati attendibili i modelli
creati dall'utente *e* salvati in cartelle attendibili, cioe' quelle
indicate alle voci "Modelli utente" e "Modelli workgroup" nelle Opzioni
di Word "Directory predefinite".

Tu come hai creato, e dove hai salvato il modello?

--
(Facci sapere se e eventualmente come hai risolto. Grazie.)

Ciao :o) Microsoft MVP (Excel)
Maurizio https://mvp.support.microsoft.com/profile/Maurizio.Borrelli
-------- Spazio personale di Maurizio Borrelli
?SPQR(C) http://spdmb.spaces.live.com
 X       RIO - Risorse in italiano per gli utenti di office
-------- http://www.riolab.org
Pippo
2007-12-07 21:46:33 UTC
Permalink
Post by Maurizio Borrelli
Post by Pippo
Post by Maurizio Borrelli
Post by Pippo
Certamente,.. pero', ho iniziato a dare uno sguardo al link che hai
evidenziato e, purtroppo, *non* sono riuscito a capire molto bene,
*almeno* l'algoritmo: causa, molto probabilmente, la mia *bassa*
conoscenza di vba per word.
Attendo, se hai mooolta *pazienza*, un qualche tuo lume..... ;-)
No, niente lumi... ma a domanda, se posso, rispondo. ;-)
La prima cosa che ci dovresti dire e' se "gira", ovvero se riesci a
farlo "girare".
Si', pero', per "girare", ho dovuto impostare (utilizzo "word 2003") il
livello di protezione macro da "Medio" a "BASSO".
Quanto sopra, se non ho commesso errori, potrebbe essere un punto *debole*?
Punto debole di cosa? O meglio... di chi? ;-)
:-))
Post by Maurizio Borrelli
Non ho verificato con Word 2003 ma solo con Word 2000 e 2007 i quali sono
entrambi impostati con protezione "Media" e non ottengo avvisi.
La cosa piu' probabile e' che il modello generato da te non sia
considerato attendibile dal tuo Word 2003. Se non ricordo male, sta
scritto (da qualche parte) che sono considerati attendibili i modelli
creati dall'utente *e* salvati in cartelle attendibili, cioe' quelle
indicate alle voci "Modelli utente" e "Modelli workgroup" nelle Opzioni di
Word "Directory predefinite".
Tu come hai creato, e dove hai salvato il modello?
Oggi ho riprovato senza spostare il modello da me creato (che avevo salvato
nelle directory predefinite) ed, il tutto, "gira" con livello di protezione
"Medio": non saprei dirti cosa e' successo ieri!


Ciao e grazie mille
Pippo
Maurizio Borrelli
2007-12-06 23:55:53 UTC
Permalink
Post by Pippo
"Maurizio Borrelli" ha scritto nel
[...]
Post by Pippo
uhm..pero', debbo anche verificare che, il documento "attivo", non e' un
qualsiasi documento, ma e' *proprio* quello basato sul mio *modello* !!!
Giusto?
..poi.. dove piazzare la suddetta istruzione? Evento "Close" ?
[...]

Ciao Pippo.

Concludo -- per modo di dire perche' ci saranno ancora tante cose da
dire -- postando un abbozzo essenziale di uno dei modi in cui si puo'
gestire una numerazione automatica (del protocollo, numero e data)
prevedendo anche la questione che hai sollevato, ovvero quella della
"trasportabilita'" del... numero. Suppongo che tu abbia ipotizzato una
situazione in cui *una sola persona* vorrebbe proseguire, per esempio
col portatile, un lavoro cominciato in ufficio ed abbia quindi
l'esigenza di *spostare* l'"oggetto" che contiene il numero da
incrementare. E viceversa, ovviamente. Situazione questa in cui l'uso di
una chiave di registro non sarebbe comoda. Ho quindi tolto il contatore
dal registro e l'ho incorporato nel modello, sotto forma di proprieta
personalizzata del documento. Questa stessa soluzione potrebbe essere
efficace anche nell'altro caso di cui si e' parlato, quello della
"multiutenza" o "gruppo di lavoro", ipotizzando un modello da salvare
appunto nella cartella "Modelli workgroup", ma questa ultima soluzione
non ho ancora potuto verificarla.

Ecco quindi il codice.

Proprieta' personalizzate del Modello (Custom Document Properties)
Nome: ProtNumero
Tipo: Numero
Valore: 0
Nome: ProtData
Tipo: Data
Valore: 1/1/2007

' Preventivi.dot(m)
' modAutoMacros - Module
Option Explicit

Public Const gcstrProjectName = "Preventivi"
Public Const gcstrCDPProtNumero = "ProtNumero"
Public Const gcstrCDPProtData = "ProtData"

Public Sub AutoNew()
'MsgBox "AutoNew", , gcstrProjectName
With ThisDocument
If .WordApp Is Nothing Then
Set .WordApp = .Application
End If
End With
End Sub

Public Sub AutoClose()
'MsgBox "AutoClose", , gcstrProjectName
With ThisDocument
If .OnQuit Then
Set .WordApp = Nothing
End If
End With
End Sub

' Preventivi.dot(m)
' ThisDocument - Document
Option Explicit

Public WithEvents WordApp As Word.Application
Private mblnOnQuit As Boolean

Public Property Get OnQuit() As Boolean
OnQuit = mblnOnQuit
End Property

Private Sub Document_New()
On Error GoTo ErrorHandler

'MsgBox "Document_New", , gcstrProjectName
'Stop
With Me.Application.ActiveDocument
With .CustomDocumentProperties
.Item(gcstrCDPProtNumero).Value = 0
.Item(gcstrCDPProtData).Value = Date
End With
.Fields.Update
End With
Selection.EndKey Unit:=wdStory

ExitProcedure:
Exit Sub

ErrorHandler:
Debug.Print gcstrProjectName; ":Document_New"
With Err
Debug.Print "ERR#"; Format$(.Number); " "; .Description
End With
Resume ExitProcedure

End Sub

Private Sub WordApp_DocumentBeforeSave(ByVal Doc As Word.Document _
, ByRef SaveAsUI As Boolean _
, ByRef Cancel As Boolean)
On Error GoTo ErrorHandler
Dim objTemplate As Word.Template
Dim lngProtNum As Long
Dim dtmProtData As Date

Debug.Print gcstrProjectName; ":WordApp_DocumentBeforeSave"
'Stop

If SaveAsUI = False Then Exit Sub
If Doc.AttachedTemplate.FullName <> ThisDocument.FullName _
Then Exit Sub

With Doc
With .AttachedTemplate
With .CustomDocumentProperties
With .Item(gcstrCDPProtNumero)
lngProtNum = .Value + 1
.Value = lngProtNum
Doc.CustomDocumentProperties _
.Item(gcstrCDPProtNumero) = .Value
End With
With .Item(gcstrCDPProtData)
dtmProtData = Date
.Value = dtmProtData
Doc.CustomDocumentProperties _
.Item(gcstrCDPProtData) = .Value
End With
End With
.Save
End With
With .CustomDocumentProperties
.Item(gcstrCDPProtNumero).Value = lngProtNum
.Item(gcstrCDPProtData).Value = dtmProtData
End With
.Fields.Update
End With
Cancel = True
With Me.Application.Dialogs(wdDialogFileSaveAs)
.Name = Format$(dtmProtData, "yyyy") _
& "-" & Format$(lngProtNum, "0000")
.Show
End With

ExitProcedure:
Set objTemplate = Nothing
Exit Sub

ErrorHandler:
Debug.Print gcstrProjectName; ":WordApp_DocumentBeforeSave"
With Err
Debug.Print "ERR#"; Format$(.Number); " "; .Description
End With
Resume ExitProcedure

End Sub

Private Sub WordApp_Quit()
mblnOnQuit = True
End Sub

--
Ciao :o) Microsoft MVP (Excel)
Maurizio https://mvp.support.microsoft.com/profile/Maurizio.Borrelli
-------- Spazio personale di Maurizio Borrelli
?SPQR(C) http://spdmb.spaces.live.com
 X       RIO - Risorse in italiano per gli utenti di office
-------- http://www.riolab.org
Maurizio Borrelli
2007-12-07 09:31:48 UTC
Permalink
"Maurizio Borrelli" wrote in message news:#***@TK2MSFTNGP04.phx.gbl:

[...]
Post by Maurizio Borrelli
Questa stessa soluzione potrebbe essere
efficace anche nell'altro caso di cui si e' parlato, quello della
"multiutenza" o "gruppo di lavoro", ipotizzando un modello da salvare
appunto nella cartella "Modelli workgroup", ma questa ultima soluzione
non ho ancora potuto verificarla.
[...]
Post by Maurizio Borrelli
Proprieta' personalizzate del Modello (Custom Document Properties)
Nome: ProtNumero
Tipo: Numero
Valore: 0
Nome: ProtData
Tipo: Data
Valore: 1/1/2007
[...]

Ciao a tutti.

Rieccomi per una prima aggiustatina.

Prima cosa ho verificato la questione "gruppo di lavoro" e purtroppo
questa impostazione non risolve in quanto fa uso del salvataggio del
modello, possibile solo a un utente per volta.

Poi segnalo la sostituzione di:

If SaveAsUI = False Then Exit Sub

perche' ho verificato che con Word 2000 non si comporta come ci si
aspetterebbe, con:

If Len(Doc.Path) Then Exit Sub

Quindi ho spostato il codice per l'aggiornamento delle proprieta' da
prima della comparsa della finestra "Salva con nome" a dopo l'eventuale
"Ok" dell'utente.

' Preventivi.dot(m)
' modAutoMacros - Module
Option Explicit

Public Const gcstrProjectName = "Preventivi"
Public Const gcstrCDPProtNumero = "ProtNumero"
Public Const gcstrCDPProtData = "ProtData"

Public Sub AutoNew()
'MsgBox "AutoNew", , gcstrProjectName
With ThisDocument
If .WordApp Is Nothing Then
Set .WordApp = .Application
End If
End With
End Sub

Public Sub AutoClose()
'MsgBox "AutoClose", , gcstrProjectName
With ThisDocument
If .OnQuit Then
Set .WordApp = Nothing
End If
End With
End Sub

' Preventivi.dot(m)
' ThisDocument - Document
Option Explicit

Public WithEvents WordApp As Word.Application
Private mblnOnQuit As Boolean

Public Property Get OnQuit() As Boolean
OnQuit = mblnOnQuit
End Property

Private Sub Document_New()
On Error GoTo ErrorHandler

'MsgBox "Document_New", , gcstrProjectName
'Stop

With Me.Application.ActiveDocument
With .CustomDocumentProperties
.Item(gcstrCDPProtNumero).Value = 0
.Item(gcstrCDPProtData).Value = Date
End With
.Fields.Update
End With
Selection.EndKey Unit:=wdStory

ExitProcedure:
Exit Sub

ErrorHandler:
Debug.Print gcstrProjectName; ":Document_New"
With Err
Debug.Print "ERR#"; Format$(.Number); " "; .Description
End With
Resume ExitProcedure

End Sub

Private Sub WordApp_DocumentBeforeSave(ByVal Doc As Word.Document _
, ByRef SaveAsUI As Boolean _
, ByRef Cancel As Boolean)
On Error GoTo ErrorHandler
Const clngShowOk = -1
Dim lngProtNum As Long
Dim dtmProtData As Date

Debug.Print gcstrProjectName; ":WordApp_DocumentBeforeSave"
'Stop

If Len(Doc.Path) Then Exit Sub
If Doc.AttachedTemplate.Name <> Me.Name Then Exit Sub

dtmProtData = Date
Cancel = True
With Doc.AttachedTemplate.CustomDocumentProperties
lngProtNum = .Item(gcstrCDPProtNumero).Value + 1
End With
With Me.Application.Dialogs(wdDialogFileSaveAs)
.Name = Format$(dtmProtData, "yyyy") _
& "-" & Format$(lngProtNum, "0000")
If .Show = clngShowOk Then
With Doc
With .AttachedTemplate
With .CustomDocumentProperties
.Item(gcstrCDPProtNumero).Value = lngProtNum
.Item(gcstrCDPProtData).Value = dtmProtData
End With
.Save
End With
With .CustomDocumentProperties
.Item(gcstrCDPProtNumero).Value = lngProtNum
.Item(gcstrCDPProtData).Value = dtmProtData
End With
.Fields.Update
.Save
End With
End If
End With

ExitProcedure:
Exit Sub

ErrorHandler:
Debug.Print gcstrProjectName; ":WordApp_DocumentBeforeSave"
With Err
Debug.Print "ERR#"; Format$(.Number); " "; .Description
End With
Resume ExitProcedure

End Sub

Private Sub WordApp_Quit()
mblnOnQuit = True
End Sub

--
Ciao :o) Microsoft MVP (Excel)
Maurizio https://mvp.support.microsoft.com/profile/Maurizio.Borrelli
-------- Spazio personale di Maurizio Borrelli
?SPQR(C) http://spdmb.spaces.live.com
 X       RIO - Risorse in italiano per gli utenti di office
-------- http://www.riolab.org
Pippo
2007-12-07 22:08:37 UTC
Permalink
Post by Maurizio Borrelli
[...]
Post by Maurizio Borrelli
Questa stessa soluzione potrebbe essere
efficace anche nell'altro caso di cui si e' parlato, quello della
"multiutenza" o "gruppo di lavoro", ipotizzando un modello da salvare
appunto nella cartella "Modelli workgroup", ma questa ultima soluzione
non ho ancora potuto verificarla.
[...]
Post by Maurizio Borrelli
Proprieta' personalizzate del Modello (Custom Document Properties)
Nome: ProtNumero
Tipo: Numero
Valore: 0
Nome: ProtData
Tipo: Data
Valore: 1/1/2007
[...]
Rieccomi per una prima aggiustatina.
Prima cosa ho verificato la questione "gruppo di lavoro" e purtroppo
questa impostazione non risolve in quanto fa uso del salvataggio del
modello, possibile solo a un utente per volta.
If SaveAsUI = False Then Exit Sub
perche' ho verificato che con Word 2000 non si comporta come ci si
If Len(Doc.Path) Then Exit Sub
Quindi ho spostato il codice per l'aggiornamento delle proprieta' da prima
della comparsa della finestra "Salva con nome" a dopo l'eventuale "Ok"
dell'utente.
' Preventivi.dot(m)
' modAutoMacros - Module
Option Explicit
Public Const gcstrProjectName = "Preventivi"
Public Const gcstrCDPProtNumero = "ProtNumero"
Public Const gcstrCDPProtData = "ProtData"
Public Sub AutoNew()
'MsgBox "AutoNew", , gcstrProjectName
With ThisDocument
If .WordApp Is Nothing Then
Set .WordApp = .Application
End If
End With
End Sub
Public Sub AutoClose()
'MsgBox "AutoClose", , gcstrProjectName
With ThisDocument
If .OnQuit Then
Set .WordApp = Nothing
End If
End With
End Sub
' Preventivi.dot(m)
' ThisDocument - Document
Option Explicit
Public WithEvents WordApp As Word.Application
Private mblnOnQuit As Boolean
Public Property Get OnQuit() As Boolean
OnQuit = mblnOnQuit
End Property
Private Sub Document_New()
On Error GoTo ErrorHandler
'MsgBox "Document_New", , gcstrProjectName
'Stop
With Me.Application.ActiveDocument
With .CustomDocumentProperties
.Item(gcstrCDPProtNumero).Value = 0
.Item(gcstrCDPProtData).Value = Date
End With
.Fields.Update
End With
Selection.EndKey Unit:=wdStory
Exit Sub
Debug.Print gcstrProjectName; ":Document_New"
With Err
Debug.Print "ERR#"; Format$(.Number); " "; .Description
End With
Resume ExitProcedure
End Sub
Private Sub WordApp_DocumentBeforeSave(ByVal Doc As Word.Document _
, ByRef SaveAsUI As Boolean _
, ByRef Cancel As Boolean)
On Error GoTo ErrorHandler
Const clngShowOk = -1
Dim lngProtNum As Long
Dim dtmProtData As Date
Debug.Print gcstrProjectName; ":WordApp_DocumentBeforeSave"
'Stop
If Len(Doc.Path) Then Exit Sub
If Doc.AttachedTemplate.Name <> Me.Name Then Exit Sub
dtmProtData = Date
Cancel = True
With Doc.AttachedTemplate.CustomDocumentProperties
lngProtNum = .Item(gcstrCDPProtNumero).Value + 1
End With
With Me.Application.Dialogs(wdDialogFileSaveAs)
.Name = Format$(dtmProtData, "yyyy") _
& "-" & Format$(lngProtNum, "0000")
If .Show = clngShowOk Then
With Doc
With .AttachedTemplate
With .CustomDocumentProperties
.Item(gcstrCDPProtNumero).Value = lngProtNum
.Item(gcstrCDPProtData).Value = dtmProtData
End With
.Save
End With
With .CustomDocumentProperties
.Item(gcstrCDPProtNumero).Value = lngProtNum
.Item(gcstrCDPProtData).Value = dtmProtData
End With
.Fields.Update
.Save
End With
End If
End With
Exit Sub
Debug.Print gcstrProjectName; ":WordApp_DocumentBeforeSave"
With Err
Debug.Print "ERR#"; Format$(.Number); " "; .Description
End With
Resume ExitProcedure
End Sub
Private Sub WordApp_Quit()
mblnOnQuit = True
End Sub
Ho inizato a studiarmi il tuo codice per cercare di capirci qualcosa, ed
eccomi con le prime domande ;-):


La "chiave" per capire il codice, credo sia soprattutto nella comprensione
delle seguenti righe:

'===================================
Public WithEvents WordApp As Word.Application
Private mblnOnQuit As Boolean

Public Property Get OnQuit() As Boolean
OnQuit = mblnOnQuit
End Property
'======================================

Giusto?

Per la parola chiave "WithEvents" pur avendo letto qualcosa su "internet"
non ho capito un bel niente.

Inoltre, non mi e' chiaro lo scopo della definizione della proprieta'
"OnQuit()".

Ti chiedo "Lumi" in merito, anzi, forse il "lume" non e' molto sufficiente,
visto il "buio" totale in cui mi trovo... :-((

Ciao e grazie milleeee
Pippo
Maurizio Borrelli
2007-12-07 22:46:06 UTC
Permalink
[...]
Post by Pippo
Post by Maurizio Borrelli
Rieccomi per una prima aggiustatina.
[...]

Ciao Pippo.
Post by Pippo
Ho inizato a studiarmi il tuo codice per cercare di capirci qualcosa, ed
La "chiave" per capire il codice, credo sia soprattutto nella
'===================================
Public WithEvents WordApp As Word.Application
Private mblnOnQuit As Boolean
Public Property Get OnQuit() As Boolean
OnQuit = mblnOnQuit
End Property
'======================================
Giusto?
Giustissimo!
Post by Pippo
Per la parola chiave "WithEvents" pur avendo letto qualcosa su
"internet" non ho capito un bel niente.
"Internet" e' persino troppo in questo caso ;-) perche' hai gia' tutto a
portata di mano, anzi di dito (tasto F1!), nella "Guida di riferimento a
Visual Basic per Microsoft Word", alla pagina:

Utilizzo di eventi con l'oggetto Application.

oltre, naturalmente, alla pagina:

WithEvents

del capitolo "Riferimenti al linguaggio Visual Basic. Parole chiave"
nella "Documentazione di Microsoft Visual Basic".

Ne potremmo riparlare facendo riferimento a quelle pagine, nel caso tu
ne abbia necessita'.
Post by Pippo
Inoltre, non mi e' chiaro lo scopo della definizione della proprieta'
"OnQuit()".
E per questo e' opportuna una ripassatina della pagina:

Oggetti, proprietà, metodi ed eventi

del capitolo "Concetti di Visual Basic", sempre nella
"Documentazione..." di prima.

In particolare, dato che la macro automatica "AutoClose" altro non e',
dal punto di vista dell'utente, che una qualsiasi macro alla quale egli
puo' accedere dalla finestra "Macro" che si ottiene con:

Strumenti > Macro > Macro...

e quindi l'utente potrebbe essere preso dall'insana curiosita' di
lanciarla per vedere che succede, non ho potuto scriverla limitandomi a:

Public Sub AutoClose()
Set ThisDocument.WordApp = Nothing
End Sub

come sarebbe necessario e sufficiente, ma ho dovuto condizionare
l'"uccisione" della variabile-oggetto per l'intercettazione degli eventi
dell'oggetto Application "WordApp", verificando che il "sistema" (Word)
sia effettivamente in uno stato di chiusura in corso.

--
Ciao :o) Microsoft MVP (Excel)
Maurizio https://mvp.support.microsoft.com/profile/Maurizio.Borrelli
-------- Spazio personale di Maurizio Borrelli
?SPQR(C) http://spdmb.spaces.live.com
 X       RIO - Risorse in italiano per gli utenti di office
-------- http://www.riolab.org
Niko
2012-07-26 14:28:54 UTC
Permalink
&#39; Preventivi.dot(m)
&#39; modAutoMacros - Module
Option Explicit
Public Const gcstrProjectName = &quot;Preventivi&quot;
Public Const gcstrCDPProtNumero = &quot;ProtNumero&quot;
Public Const gcstrCDPProtData = &quot;ProtData&quot;
Public Sub AutoNew()
&#39;MsgBox &quot;AutoNew&quot;, , gcstrProjectName
With ThisDocument
If .WordApp Is Nothing Then
Set .WordApp = .Application
End If
End With
End Sub
Public Sub AutoClose()
&#39;MsgBox &quot;AutoClose&quot;, , gcstrProjectName
With ThisDocument
If .OnQuit Then
Set .WordApp = Nothing
End If
End With
End Sub
&#39; Preventivi.dot(m)
&#39; ThisDocument - Document
Option Explicit
Public WithEvents WordApp As Word.Application
Private mblnOnQuit As Boolean
Public Property Get OnQuit() As Boolean
OnQuit = mblnOnQuit
End Property
Private Sub Document_New()
On Error GoTo ErrorHandler
&#39;MsgBox &quot;Document_New&quot;, , gcstrProjectName
&#39;Stop
With Me.Application.ActiveDocument
With .CustomDocumentProperties
.Item(gcstrCDPProtNumero).Value = 0
.Item(gcstrCDPProtData).Value = Date
End With
.Fields.Update
End With
Selection.EndKey Unit:=wdStory
Exit Sub
Debug.Print gcstrProjectName; &quot;:Document_New&quot;
With Err
Debug.Print &quot;ERR#&quot;; Format$(.Number); &quot; &quot;; .Description
End With
Resume ExitProcedure
End Sub
Private Sub WordApp_DocumentBeforeSave(ByVal Doc As Word.Document _
, ByRef SaveAsUI As Boolean _
, ByRef Cancel As Boolean)
On Error GoTo ErrorHandler
Const clngShowOk = -1
Dim lngProtNum As Long
Dim dtmProtData As Date
Debug.Print gcstrProjectName; &quot;:WordApp_DocumentBeforeSave&quot;
&#39;Stop
If Len(Doc.Path) Then Exit Sub
dtmProtData = Date
Cancel = True
With Doc.AttachedTemplate.CustomDocumentProperties
lngProtNum = .Item(gcstrCDPProtNumero).Value + 1
End With
With Me.Application.Dialogs(wdDialogFileSaveAs)
.Name = Format$(dtmProtData, &quot;yyyy&quot;) _
&amp; &quot;-&quot; &amp; Format$(lngProtNum, &quot;0000&quot;)
If .Show = clngShowOk Then
With Doc
With .AttachedTemplate
With .CustomDocumentProperties
.Item(gcstrCDPProtNumero).Value = lngProtNum
.Item(gcstrCDPProtData).Value = dtmProtData
End With
.Save
End With
With .CustomDocumentProperties
.Item(gcstrCDPProtNumero).Value = lngProtNum
.Item(gcstrCDPProtData).Value = dtmProtData
End With
.Fields.Update
.Save
End With
End If
End With
Exit Sub
Debug.Print gcstrProjectName; &quot;:WordApp_DocumentBeforeSave&quot;
With Err
Debug.Print &quot;ERR#&quot;; Format$(.Number); &quot; &quot;; .Description
End With
Resume ExitProcedure
End Sub
Private Sub WordApp_Quit()
mblnOnQuit = True
End Sub
Salve.. sono al mio primo post.. quindi scusate le imperfezioni...
Ho utilizzato le indicazioni sopra riportate per creare preventivi con numero progressivo utilizzando un modello di word che si compila solo al salvataggio del documento.
FANTASTICO!!!
Come posso fare la stessa cosa con un modello in excel? Non conosco il linguaggio VBA.. quindi grandi difficoltà....

Grazie
Niko
c***@gmail.com
2016-09-21 08:41:29 UTC
Permalink
ciao a tutti, chiedo scusa, scusissima, ma io non ci capisco una beneamata...
utilizzo il computer perchè "va", sono utente Apple dal 90 (sempre fatto grafica) e se devo scrivere un codice che sia uno...vado in bomba...

ma...un template da poter successivamente modificare non si trova da nessuna parte?

grazie a tutti!
Carlo
paoloard
2016-09-26 16:03:24 UTC
Permalink
ha scritto nel messaggio news:560f5e72-05d9-487c-8b23-***@googlegroups.com...

ciao a tutti, chiedo scusa, scusissima, ma io non ci capisco una
beneamata...
utilizzo il computer perchè "va", sono utente Apple dal 90 (sempre fatto
grafica) e se devo scrivere un codice che sia uno...vado in bomba...

ma...un template da poter successivamente modificare non si trova da nessuna
parte?

grazie a tutti!
Carlo


Cosa significa? Che genere di numero progressivo? Il numero di pagina? Il
numero di un elenco numerato? Il numero di pargrafo?
ciao
paoloard
d***@gmail.com
2017-12-12 19:12:33 UTC
Permalink
Post by c***@gmail.com
ciao a tutti, chiedo scusa, scusissima, ma io non ci capisco una beneamata...
utilizzo il computer perchè "va", sono utente Apple dal 90 (sempre fatto
grafica) e se devo scrivere un codice che sia uno...vado in bomba...
ma...un template da poter successivamente modificare non si trova da nessuna parte?
grazie a tutti!
Carlo
Cosa significa? Che genere di numero progressivo? Il numero di pagina? Il
numero di un elenco numerato? Il numero di pargrafo?
ciao
paoloard
CIAO RAGAZZI,
SONO ALLE PRIME ARMI CON WORD E VORREI INSERIRE UN NUMERO PROGRESSIVO AL MIO PREVENTIVO ALL'AVVIO DEL DOCUMENTO.
DEVO PER FORZA DI COSE FARLO MANUALMENTE OPPURE C'E' UN SISTEMA AUTOMATICO? SE SI, COME POSSO FARE PER POTERLO INSERIRE? RIUSCITE AD AIUTARMI?

BUONA SERATA.
DANIELE
x***@gmail.com
2018-01-02 17:02:46 UTC
Permalink
cut
Post by d***@gmail.com
CIAO RAGAZZI,
SONO ALLE PRIME ARMI CON WORD E VORREI INSERIRE UN NUMERO PROGRESSIVO AL MIO PREVENTIVO ALL'AVVIO DEL DOCUMENTO.
DEVO PER FORZA DI COSE FARLO MANUALMENTE OPPURE C'E' UN SISTEMA AUTOMATICO? SE SI, COME POSSO FARE PER POTERLO INSERIRE? RIUSCITE AD AIUTARMI?
BUONA SERATA.
DANIELE
Vedi se può esserti di aiuto questo thread:
https://is.gd/5NaGYC

ciao paoloard

Giovanni Zezza
2007-12-07 09:51:08 UTC
Permalink
Post by Maurizio Borrelli
una chiave di registro non sarebbe comoda. Ho quindi tolto il contatore
dal registro e l'ho incorporato nel modello, sotto forma di proprieta
personalizzata del documento.
Sapete vero che esistono le "variabili di documento"?:

...
ActiveDocument.Variables.Add("ProtNumero", 1)
NumeroProtocollo = ActiveDocument.Variables("ProtNumero").Value
...

Il numero di protocollo di questo documento è {DOCVARIABLE "ProtNumero"}


Per un giochino del genere sono secondo me una cosina un po' più pulita,
essendo accessibili solo da VBA (o attraverso il campo DOCVARIABLE).

Ciao.
Maurizio Borrelli
2007-12-07 10:07:59 UTC
Permalink
Maurizio Borrelli, nel messaggio
Post by Maurizio Borrelli
una chiave di registro non sarebbe comoda. Ho quindi tolto il contatore
dal registro e l'ho incorporato nel modello, sotto forma di proprieta
personalizzata del documento.
...
ActiveDocument.Variables.Add("ProtNumero", 1)
NumeroProtocollo = ActiveDocument.Variables("ProtNumero").Value
...
Il numero di protocollo di questo documento è {DOCVARIABLE
"ProtNumero"}
Per un giochino del genere sono secondo me una cosina un po' più pulita,
essendo accessibili solo da VBA (o attraverso il campo DOCVARIABLE).
Ciao Giovanni.

Si', grazie. :-)

Sto valutando anche queste. Per ora mi sono orientato sulle Proprieta'
del documento per una ragione ben precisa: il tentativo di rendere
accessibile all'utente il numero progressivo allo scopo, per esempio, di
permettere l'azzeramento della numerazione al cambio d'anno, o per
manutenzione, senza necessita' di intervento "lato Visual Basic".

Di contro, la loro piu' immediata accessibilita' le rende meno "pulite",
come giustamente dici tu, e a questo si potrebbe anche porvi rimedio,
per esempio distruggendole dopo l'uso (previo "consolidamento" dei
codici di campo che fanno loro riferimento), ma non so se ne vale la
pena.

Sto valutando, insomma... e ogni osservazione e' graditissima.

--
Ciao :o) Microsoft MVP (Excel)
Maurizio https://mvp.support.microsoft.com/profile/Maurizio.Borrelli
-------- Spazio personale di Maurizio Borrelli
?SPQR(C) http://spdmb.spaces.live.com
 X       RIO - Risorse in italiano per gli utenti di office
-------- http://www.riolab.org
Giovanni Zezza
2007-11-30 09:57:59 UTC
Permalink
Post by Pippo
Io pero', mi riferivo a piu' pc che lavorano in *locale* (un pc ubicato in
magazzino, un altro a casa, ma non connessi in rete), *non* collegati in
rete, cmq e' interessante anche il caso di pc collegati in rete.
Se vuoi che si tratti di un numero progressivo (e senza buchi), i pc devono
poter accedere alla medesima informazione di quale sia l'ultimo numero
registrato. Che questo voglia dire contattare un server centrale in rete,
trasportare fisicamente un file da un pc all'altro, o trascriversi il
numero su un fogliettino e ribatterlo a mano cambia poco: in qualche modo
l'informazione deve essere comunicata.

Il modo migliore, più semplice e più sicuro, è ovviamente che il dato sia
conservato in un'unica postazione centrale, amministrato possibilmente da
un programma server (piuttosto che dall'accesso diretto ad un unico file da
parte di tutti i pc). Si può usare, se è già disponibile, un server
database, o studiare qualcosa ad hoc di più agile per questo solo scopo.

Se invece è possibile rilassare la condizione "numero progressivo",
trasformandola in "identificativo univoco", ci sono meccanismi che
consentono di generare codici univoci in modo indipendente e senza alcun
contatto fra i vari soggetti (vedi i Message-ID dei messaggi di posta).

Banalmente, ogni postazione potrebbe avere un proprio identificativo, da
anteporre ad un numero progressivo locale (da cui risulterebbero codici del
tipo: CASA.1, CASA.2, MAGAZZINO.1...), oppure si possono pensare meccanismi
basati su data e ora (timestamp), che consentirebbero anche un ordinamento
cronologico dei codici, o altro ancora.

Ciao.
a***@gmail.com
2012-02-10 06:41:57 UTC
Permalink
Salve ragazzi! Riprendo questa discussione nella speranza di trovare una risposta illuminante.
Con Word 2010 è possibile numerare le pagine ad ogni apertura?
Nella mia azienda i contratti sono in formato .docx. Purtroppo il formato .dotx non è compatibile con la macro per l'aggiornamento di tutti i campi che ho impostato.
Se sì, mi potete aiutare a capire come poterlo far funzionare questo contatore?
Grazie mille sin d'ora.

A. Marengo
Mauro Gamberini
2012-02-10 07:59:54 UTC
Permalink
Purtroppo il formato .dotx non è compatibile con la macro per
l'aggiornamento di tutti i campi che ho impostato.
***********************************

.dotm
Modelli con supporto alle macro.

.dot
Il vecchio formato Modelli
--
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/
a***@gmail.com
2012-02-10 13:06:12 UTC
Permalink
Sì, grazie per la dritta. Ma purtroppo ho dovuto ripiegare sul file .docx perché non mi accettava la macro creata dalla seguente registrazione:
- CTRL+F9
- F9
Ora non ho il codice da postare perchè sono a casa, ma in ogni caso son due righe che mi sballano la stabilità di Word 2010...
Mauro Gamberini
2012-02-10 13:31:41 UTC
Permalink
ha scritto nel messaggio news:25230629.701.1328879172942.JavaMail.geo-discussion-***@vbnm4...

Sì, grazie per la dritta. Ma purtroppo ho dovuto ripiegare sul file .docx
perché non mi accettava la macro creata dalla seguente registrazione:
- CTRL+F9
- F9
Ora non ho il codice da postare perchè sono a casa, ma in ogni caso son due
righe che mi sballano la stabilità di Word 2010...
*********************

Cosa deve fare la tua macro?
--
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/
a***@gmail.com
2012-02-11 09:21:00 UTC
Permalink
Ciao.
Innanzitutto, non ho specificato che la macro NON è legata al documento.
L'ho creata all'interno di ogni Word di ogni singolo utente ed è la seguente:

Sub AggiornamentoModulo()
'
' AggiornamentoModulo Macro
'
'
Selection.WholeStory
Selection.Fields.Update
End Sub

La mia macro deve aggiornare, nella seconda e terza pagina, i campi riempiti nella prima. I campi da riempire sono stati creati in due passaggi:
dalla scheda "Sviluppo":
- Controllo contenuto raccolta blocchi predefiniti;
- Controllo contenuto testo normale;
- alla casella creata, ho assegnato un segnalibro.
Successivamente, nei fogli seguenti, ho proseguito con la tabella ricopiandone il contenuto e i campi che si aggiornano automaticamente sono stati inseriti con i seguenti passaggi:
- Inserisci, Parti rapide, Campo;
- Categorie: Ref;
- scelta del segnalibro corrispondente.
Col file .docx funziona tutto. Gli altri formati bloccano addirittura il caricamento di Word. Strano.
In ogni caso, ora questa modalità funziona, sebbene abbia dovuto obbligare i miei colleghi a salvare subito il file per renderlo nuovamente condiviso. Non potrei far loro usare una copia in locale, perchè altrimenti non potrei inserire ciò per cui stiamo discutendo: il contatore.
La questione è se sia possibile inserirlo o meno... Usando un file .txt di appoggio nello stesso percorso del file, è possibile aggiungere al documento un contatore progressivo per ogni volta che si apre?
Nella speranza di esser stato più preciso, ringrazio e attendo un vs riscontro.
Continua a leggere su narkive:
Loading...