Newsgroup: it.comp.os.win.software
Titolo: Modelli Word

E' possibile, in un modello di word (.doT), settare la directory di salvataggio 
per i file basati su un modello?
Nel senso e' possibile fare in modo che i documenti basati sul modello 
PIPPO.dot vengano salvati nella directory c:/PIPPO e quelli basati su PLUTO.dot 
vengano salvati in c:/PLUTO?
Grazie mille
-- 
PremPa :)
- Fletto i muscoli e sono nel vuoto -
Rat-Man by Leo Ortolani

vengano salvati in c:/PLUTO?
No! Cioe', Si'. Insomma, no! Cioe', l'unico modo, che io sappia, e'
eseguire una macro all'avvio che sistemi un po' di cose. Pero': non mi pare
ci siamo di impedire che uno faccia alla fine quello che vuole, se vuole;
e' un gran pasticcio, perche' devi poi intervenire su TUTTI i modelli,
perche' rimettano a posto quello che PIPPO.DOT e PLUTO.DOT hanno spostato;
una macro che si avvia automaticamente alla creazione di un nuovo documento
e', come dire, di cattivo gusto.
Ciao.

 vengano salvati in c:/PLUTO?
Si č possibilissimo e in dipendenza dall'esigenza anche coretto.
Devi realizzare un codice ad hoc per la tua problematica.
Apri word vai in Strumenti>Macro>Visual Basic Editor.
Se sei alle prime armi devi studiare non poco.
Il linguaggio č sufficientemente potente e ti assicuro che puoi fare anche
di piů.
Addirittura alcuni lo scelgono per realizzare virus che si propagano tramite
documenti word.
Buon lavoro!
--
Kar
e-mail: cprivitera@@
yahoo.it
(per rispondere togliere una @)

 Nel senso e' possibile fare in modo che i documenti basati sul modello
PIPPO.dot vengano salvati nella directory c:/PIPPO e quelli basati su
PLUTO.dot vengano salvati in c:/PLUTO?
Dato che l'utente, all'atto del salvataggio, potrebbe cambiare cartella,
potresti disattivare la possibilita` di salvare togliendo la voce dalla
barra dei menù e degli strumenti, quindi sostituendola con una tua richiesta
del solo nome del documento da salvare.
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

apposita proprieta` utente del modello
Credo di essermi perso prima ancora di partire.
Potresti essere piu' esplicito? Grazie.
Ho provato a fare come dicevi ma mmi sono bloccato sul dove farlo.
Grazie


 Ho provato a fare come dicevi ma mmi sono bloccato sul dove farlo.
Quella mia frase li` sopra si "traduce" cosi`:
    File
    > Proprieta`
      Personalizza
      Nome: Cartella
      Tipo: Testo
      Valore: c:\pippo
      [Aggiungi]
      [Ok]


      [Ok]
Ok, questo l'ho fatto.
Il resto mi e' ancora piu' oscuro.
Grazie per la pazienza.


 Grazie per la pazienza.
No, non ringraziarmi perche' l'ho appena persa. ;-)))
Ma, dico io, e` mai possibile?... Adesso cosa dovrei dirti? A quale domanda
dovrei rispondere? Vedi qualche domanda in questo tuo post? Ricordare non mi
ricordo quasi piu` come mi chiamo e per fortuna almeno quello e` scritto qui
sopra. Tempo da andare a scavare fra i post non ne ho eppoi il problema e`
tuo, non mio. E` anche questione di cortesia nei confronti di quelli che ci
seguono che nemmeno loro possono mettersi a ricucire le fila del discorso
che magari potrebbe interessarli o peggio (per te) potrebbero avere qualche
cosa di interessante da dirci e cosi` ce la perdiamo.
Mi sono sfogato, grazie. Adesso posso andare a scavare...
... ... ... ...
... in quel post dicevo che il passo successivo poteva essere:
    Option Explicit
    Private Sub Document_New( _
    )
      ChangeFileOpenDirectory _
        CustomDocumentProperties("Cartella").Value
      Dialogs(wdDialogFileSaveAs).Show
    End Sub
Questo codice lo copi e incolli nella finestra del codice dell'oggetto
"ThisDocument" del progetto Visual Basic del tuo modello. Traduco?
In Word:
    Strumenti
    > Macro
      > Visual Basic Editor
Ora sei nell'editor di Visual Basic.
    Visualizza
    > Gestione progetti
Cerca il nome del progetto che potrebbe chiamarsi per esempio:
    TemplateProject (Modello1)
Sotto a questo nome dovresti vedere l'oggetto "ThisDocument". Selezionalo
quindi:
    Visualizza
    > Codice
Dovrebbe essersi aperta una finestra dal probabile titolo:
    Modello1 - ThisDocument (codice)
Copia e incolla il codice seguente:
    Option Explicit
    Private Sub Document_New( _
    )
      ChangeFileOpenDirectory _
        CustomDocumentProperties("Cartella").Value
      Dialogs(wdDialogFileSaveAs).Show
    End Sub
(E` lo stesso di prima!)
Se per miracolo l'istruzione Option Explicit e` gia` scritta cancellala in
modo che ce ne sia una sola, prima d'ogni altra.
Salva il modello e chiudilo. Poi crea un nuovo documento basato su tale
modello e... facci sapere come e` andata!


tale modello e... facci sapere come e` andata!
Funziona.
(anche se l'optimum sarebbe che chiedesse il salvataggio alla chiusura del 
documento invece che all'apertura, ma va bene lo stesso) ;)
Grazie mille per l'aiuto.
Mi spiace di averti fatto perdere la pazienza :)


 Mi spiace di averti fatto perdere la pazienza :)
:-)


possiamo parlare e vedere insieme cosa eventualmente non va.
Ora lo fa alla chiusura.
Per riuscirci ho semplicemente cambiato da:
Private Sub Document_New()
a:
Private Sub Document_Close()
Ora una finezza in piu' sarebbe quella di far in modo che in
automatico mi proponesse come nome del file per il salvataggio la
data magari in formato yy-mm-dd
Grazie e alla prossima.
P.S.
Sono stato bravo?


 :)
Stavo proprio per dirti bravo, ma vedo che gia` ci hai pensato tu... :-))))


    SaveAs "c:\" & Format$(Date, "yy-mm-dd") & ".doc"
L'ho messa ma mi chiedeva di salvarlo e poi lo salvava un'altra
volta da solo. Normale mi dirai tu. Io ho pensato che potesse
dipendere dalla parte precedente 
    	ChangeFileOpenDirectory _
    	CustomDocumentProperties("Cartella").Value
    	Dialogs(wdDialogFileSaveAs).Show
e quindi l'ho commentata e funziona se chiudo il documento creato
sul questo modello. Ma se gli dico di salvarlo mi apre la finestra
di dialogo nella directory giusta ma il nome che mi suggerisce per
il salvataggio e' quello che prende dalla prima riga, mentre io
preferirei che ci fosse il formato "yy-mm-dd".
Allora ho provato a rimettere il codice che ho scritto sopra aggiungendo la 
riga
 
    	CustomDocumentProperties("Nome").Value
Dopo aver creato nelle proprieta' del modello la voce corrispondente in maniera 
del tutto simile a quella che mi avevi illustrato e che riporto qui' sotto    
File
    > Proprieta`
      Personalizza
      Nome: Nome
      Tipo: Testo
      Valore: & Format$(Date, "yy-mm-dd") &
      [Aggiungi]
      [Ok]
Ma quando vado a salvare il modello ottengo un
Errore di run-time "438"
Proprieta' o metodo non supportati dall'oggetto
Inoltre con la procedura "nascosta" di salvataggio non posso dirgli di non 
salvare e non mi avverte se sta per sovrascrivere un file gia' esistente con lo 
stesso nome.


 > Maurizio Borrelli:

Forse siamo arrivati al punto che possiamo finalmente rimboccarci le maniche
e metterci a lavorare sul serio perche' ora mi sembra che tu abbia in mano
tutti gli elementi necessari per fare cio` che vuoi. Si tratta solo di
chiarire come vuoi che il tutto avvenga. Per cui riassumo: vogliamo che
l'utente (-; quando dico utente intendo chiunque usa la "cosa" mentre e` in
funzione, non in progetto, quindi tu, io, chiunque, insomma, e come io a te
non direi "utonto" ti prego di non dirlo tu a me... ;-) Dicevo:
1. vogliamo che l'utente non si debba preoccupare di dove, in quale
cartella, salvare il file e nemmeno di che nome assegnargli;
2. vogliamo che la cartella di salvataggio sia, per esempio, "c:\pippo" ma
vogliamo anche avere la possibilita` di modificarla facilmente se cambiamo
idea;
3. vogliamo che il nome del file sia costituito dalla data del giorno in
formato "aaaa-mm-gg" -perche' di tale file ne viene prodotto uno al giorno-
e dall'estensione normale di Word ".doc";
4. vogliamo poter salvare (aprire per consultazione ed eventualmente salvare
in caso di modifiche) piu` volte nel corso della giornata tale file,
sovrascrivendo l'eventuale file omonimo gia esistente e in considerazione di
questo sara` necessario che alla creazione di un nuovo documento basato sul
modello in esame venga verificata l'eventuale esistenza di tale file e che
venga aperto questo invece di un nuovo documento vuoto;
5. vogliamo che l'utente possa decidere se salvare o meno ma come gia` detto
non vogliamo che intervenga nella scelta della cartella e del nome;
6. vogliamo che un file con il nome di una data diversa da quella corrente
non possa essere salvato in caso di modifiche ritenendole dovute unicamente
a cause accidentali.
7. dobbiamo decidere se e cosa fare nelle ore intorno al cambiamento di data
(-;mezzanotte;-);
8. dobbiamo decidere cosa fare nelle ore "limite" di apertura/chiusura
giornata.
Ecco fatto. Come vedi le cose da decidere non sono poche. Forse alcune ne ho
tralasciate e ad altre ho dato eccessiva importanza. Altre ancora posso
averle travisate o mal interpretate. Ma piu` o meno sono queste le cose
sulle quali ti devi esprimere e che devi chiarire prima di tutto a te
stesso.


apertura/chiusura giornata.
Definire "apertura/chiusura giornata"
Per ora mi sembra tutto


ovviamente andranno rimossi o commentati.
Quello che succede e' che all'apertura del file basato sul modello Word mi 
avverte che sto facendo un nuovo documento (Document_New) e sta inizializzando 
la classe (Class_Initialize). Dopodiche' alla chiusura mi dice che sta 
chiudendo il documento (Document_Close) e che sta terminando la classe 
(Class_Terminate). Poi mi chiede se voglio salvare le modifiche a Document1, se 
gli rispondo si mi apre la finestra di dialogo, pero' in c:\Documenti e non in 
c:\Documenti\Test che avevo preventivamente creato. Il nome del file e' la 
prima parte della prima riga del testo che ho scritto.
Se chiudo il file e poi annullo il salvataggio al secondo tentativo di 
salvataggio mi da un errore di run-time '91'. Variabile oggetto o variabile di 
blocco With non impostata. Avvio il debug e nel modulo mi segnala la riga 
 Else
    Set m_wdApp.WordApp = Nothing
in:
 Public Sub GestoreEventi( ByVal Imposta As Boolean )
nella finestra del codice del modulo MFunzioni


 nella finestra del codice del modulo MFunzioni
La corretta sequenza dei messaggi dovrebbe essere:
 . creazione di un nuovo documento basato sul nostro modello:
    Document_New
    Class_Initialize
    <scrivi del testo, poi chiudi>
    WordApp_DocumentBeforeClose
    "Salvare le modifiche a Documento<n>?"
    [Si`] [No] [Annulla]
    <Rispondi: [Si`]>
    WordApp_DocumentBeforeSave
    Document_Close
    Class_Terminate
 . apertura di un documento esistente basato sul nostro modello:
    Document_Open
    Class_Initialize
    <scrivi altro testo, poi chiudi>
    WordApp_DocumentBeforeClose
    "Salvare le modifiche a <aaaa-mm-gg hh.nn>.doc?"
    [Si`] [No] [Annulla]
    <Rispondi: [Si`]>
    WordApp_DocumentBeforeSave
    Document_Close
    Class_Terminate
Come vedi gli eventi "Class_Initialize" e "Class_Terminate" sono all'inizio
(dopo la creazione/apertura) e alla fine. Se questo non accade ottieni
l'errore che segnali. Probabilmente hai saltato o sbagliato qualcosa nella
sequenza di operazioni da compiere che ti ho proposto. Rifare tutto da zero
di solito e` la miglior cosa. :-(
Prima di rifare, visto che da quel che dici l'evento
"WordApp_DocumentBeforeClose" non viene scatenato ma viene eseguito subito
il codice di Document_Close, che termina la classe CWordApp che invece
dovrebbe intercettare gli eventi del documento, bisognerebbe eseguire
passo-passo. Sai come si fa?
Potrei anche aver trascritto io male qualcosa, per cui verifico poi ti so
dire.
