Newsgroup: it.comp.lang.visual-basic
Titolo: Macro per office

Premetto che come programmatore valgo meno di zero (cioè non so fare
niente).
Da circa un anno lavoro in un ufficio, e mi sono reso conto che molti
documenti che creiamo sono alquanto ripetitivi, per cui mi sono creato delle
macro per automatizzare i lavori più noiosi (intestazioni, indirizzi più
usati, timbri, etc). Il lavoro si è alquanto velocizzato.
Però stavo pensando se era possibile creare qualche piccola interfaccia che
magari chiede dei dati da inserire in campi (ad esempio un indirizzo
occasionale), con delle check box ti chiede se vuoi inserire delle cose, e
poi apre word creando il documento e facendo partire le macro necessarie già
presenti al momento giusto.
Se qualcuno avesse un pò di tempo da perdere con me, mi faccia sapere,
magari ci contattiamo via E-mail..
Grazie.
Andrea

> "M.Rick" [...]:

E perche'? Questo (il ng) mi sembra un buon posto per parlare di queste
cose. Finche' non ci cacciano...
Ma... quando dici che come programmatore vali meno di zero cosa intendi...
zero assoluto o zero normale? Perche', sai com'e', sarebbe richiesta la tua
partecipazione attiva se vogliamo continuare.
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

Zero assoluto proprio no (la tastiera so usarla :-) ). A parte gli scherzi,
come linguaggio non so niente, ho comprato un manuale ed un libro  (su VB6)
ma riesco solo a fare qualche semplice interfaccia grafica. Il problema poi
è associare la grafica creata al linguaggio.
Le macro in word le ho create con il registratore di macro, e poi ho giocato
con quello che l'editor mi aveva scritto.
Dunque, se non è zero assoluto questo........
Per quanto riguarda la mia partecipazione attiva, io non mi faccio problemi.
Fammi sapere.
Ciao
Andrea

 > partecipazione attiva se vogliamo continuare.

Benissimo. Eccomi qua.
Vediamo di fare il punto della situazione. Direi che il tuo obiettivo e':
    semplificare
    rendere di piu' rapida esecuzione
    migliorare la precisione
del lavoro d'ufficio che viene svolto per mezzo di MS WinWord. Giusto?
Quali conoscenze sono necessarie? Innanzi tutto una conoscenza "avanzata"
dello stesso Word. Intendo di tutto cio' che si puo' fare con Word senza
passare alla programmazione.
E' di fondamentale importanza padroneggiare bene Stili, Modelli, Tabelle,
Campi (Codici di campo), Sezioni, ... E, ancora, l'interazione col sistema
operativo e la sua gestione dei file.
Poi ci vuole un piccolo progetto, un'idea, un "probbblema" da risolvere. Sul
quale impostare un'analisi. La parte piu' difficile e critica del nostro
lavoro.
Ed ora tocca a te, M.Rick. (Speriamo anche che qualcuno si aggreghi.)
<nota>
Fai una ricerca con google dei post di questo ng che contengono la parola
"quotare" e leggili tutti. Come "punizione" penso possa andare. ;-)
</nota>
<nota2>
Come hai visto, ho un po' riassunto i concetti espressi nei nostri post
precedenti, cosi' quando risponderai potrai evitare di "quotare", ovvero
eli'dere, ome'ttere, la parte alta di questo mio.
</nota2>


lavoro
A dir la verità, il progetto ci sarebbe (nella mia fervida mente), ma è
l'unica cosa che ho. Anche per questo tempo fa avevo acquistato i manuali,
poi mi sono accorto che non è così semplice imparare un linguaggio di
programmazione nei ritagli di tempo. E da qui nasce il mio post iniziale.
Solo che l'idea è talmente grande (bè non esageriamo, per me è grande, che
non so se è il caso di descriverla su un post. Cmq fammi sapere.
Ciao
Andrea
NOTA:  > <nota>
              > Fai una ricerca con google dei post di questo ng che
contengono la parola
              > "quotare" e leggili tutti. Come "punizione" penso possa
andare. ;-)
sono andato si Goggle ed ho studiato..... di nuovo scusa.....

 Cmq fammi sapere. [...]
Fatto. :-)


cosi' grande che non possa essere riferita in 10 righe.
Allora, vediamo se in 10 righe riesco a spiegarmi:
- Avvio Word, interfaccia chiede se vuoi documento bianco, precompilato o
modelli già fatti (check box)
- Se bianco, allora word normale, se precompilato avvia inserimento
variabili
- Variabili: numero di protocollo, data (default attuale, optional: a
scelta), serie di OGGETTI prefabbricati + 1 libero, Indirizzi a cui spedire
(precompilati + libero    con check box) eventuali diciture da inserire
(riferimenti documenti precedenti, per competenza, per conoscenza, etc)
scelta del Capo Ufficio o suo vice per gruppo firma, eventuale sigla in
calce di chi ha redatto il documento.
- se si sceglie modello già fatto, chiede protocollo, data (come sopra),
dati del soggetto da inserire (sesso - così cambia automaticamente i generi
nella lettera - luogo e data di nascita, indirizzo, professione, etc) Capo
ufficio o vice, e sigla di chi ha redatto.
Bè, pare che ce l'ho fatta in 9 righe, però onestamente io non capirei
granchè di quello che ho in mente.
E adesso?
Ciao
Andrea

 E adesso?
Adesso incominciamo a ragionare su quello che hai scritto. E ragioniamo per
approssimazioni. Premetto pero' una piccola considerazione: Word fa parte
della "suite" *Office*, it.: ufficio, quindi proprio quello che ci serve. E'
un prodotto che esiste da svariati anni e raccoglie l'esperienza di un
enorme numero di persone. Saremmo ingenui o presuntuosi o faciloni se non
tenessimo questo sempre in mente. Quindi prima di metterci a pensare:
"voglio fare (ex novo) la tal cosa" dobbiamo prima chiederci: "possibile che
la tal cosa non sia' gia prevista?". Solo dopo aver verificato che la tal
cosa o non esiste o e' implementata in maniera non rispondente alle nostre
esigenze, ci metteremo a scrivere codice. Addirittura, per un problema di
costi o di tempo, che proverbialmente sono la stessa cosa, ci potrebbe
convenire addattare le nostre esigenze alla soluzione presente
nell'applicativo, piuttosto che il contrario.
Nel caso che proponi, cos'ha che non va la finestra di dialogo:
    File > Nuovo...
? Mi sembra che faccia proprio quello che richiedi.
Solo... non compare all'avvio di WinWord. E a questo c'e' rimedio.
Poi potrebbe essere affollata di modelli e autocomposizioni non necessarie.
Ed anche a questo possiamo ovviare.
Poi ha titoli di pagine non significativi mentre ne vorremmo magari altri
che mancano. Possiamo aggiungerli.
Cominciamo col fare apparire tale finestra di dialogo all'avvio di WinWord:
Normal.dot
MPrincipale
(Queste due righe vogliono dire che nel modello base "Normal.dot" inseriamo
un modulo al quale assegnamo il nome "MPrincipale", dove "M" sta appunto per
"modulo". E quello che segue e' il codice che scriviamo in "MPrincipale".)
Option Explicit
Public Sub AutoExec()
  With Dialogs.Item(wdDialogFileNew)
    .Show
  End With
End Sub
Poi potremmo voler eliminare tutti i modelli presenti in tale finestra:
    Start > Impostazioni > Pannello di controllo > Installazione
applicazioni
    Microsoft Office 2000 SR-1 Professional > Aggiungi/Rimuovi...
    Aggiungi/Rimuovi caratteristiche
    Microsoft Office > Microsoft Word per Windows > Creazioni guidate
modelli
    Escludi dall'installazione > Aggiorna
E creare delle pagine con i nomi che vanno bene a noi, per esempio "Pippo",
"Pluto" e "Paperino":
    Word > Strumenti > Opzioni...
    Directory predefinite; Modelli utente; Modifica;
    Annulla (Perche' non vogliamo modificare nulla ma solo leggere qual e'
il percorso
dei modelli.)
Quindi chiudiamo Word e creiamo le nuove cartelle "Pippo", "Pluto" e
"Paperino" nella cartella dei "modelli utente". Riavviamo Word e salviamo
*come modello* un documento vuoto in ognuna di tali cartelle, giusto per
vedere l'effetto che fa. Poi chiudiamo e riapriamo Word. (Continua?)
Tocca a te.


Poi potremmo voler eliminare tutti i modelli presenti in tale finestra
E su questo nessun problema.
Però per quanto riguarda quello di cui sopra?
Domanda masoschista: sei sicuro di voler continuare con me ? Mi sento peggio
di un bambino di tre anni :-)
Ciao
Andrea

 di un bambino di tre anni :-)
:-)
Venditore: E' facilissimo: potrebbe usarlo un bambino di 3 anni.
Cliente: Ci credo. Ma, secondo lei, io sarei in grado di farlo funzionare?
A questo punto, se continui a rispondere, io non mi tiro indietro. Tempo
(e colleghi del ng) permettendo.
Per non sputtanare l'esistente funzionante il sistema migliore e' chiudere
word, se aperto, individuare sul disco il file:
    normal.dot
copiarlo su floppy, un bel floppy pulito con l'etichetta col bordino rosso
(il bordino blu lo destinerai agli esercizi) e la dicitura
    normal.dot
    lavoro
    <data>
    1/1
dove 1/1 sta per "minidisco numero 1 di una serie composta da un solo
minidisco". Poi confronti che quel che e' scritto nel dischetto sia uguale a
quello scritto nel disco fisso:
    Start > Programmi > Prompt di MS-DOS
    c:
    cd "\windows\application data\microsoft\modelli" (o quel che e' nel tuo
pc)
    fc /b a:normal.dot normal.dot
e, se non ci sono problemi, proteggi il floppy contro la scrittura, lo metti
in cassaforte e non lo tocchi piu' (ci si augura).
Poi rinomini normal.dot in
    normal.lavoro
Quindi riaprirai word (che creera' un nuovo "normal.dot" vuoto) e come prima
cosa ti accerterai che sia visibile la barra degli strumenti "Visual Basic".
Se e' in mezzo allo schermo spostala e a'ncorala in quello dei quattro lati
dello schermo che preferisci. Poi clic sui pulsanti:
    Modalita' progettazione
    Visual Basic Editor
Se non vedi la finestra "Gestione progetti" aprila con l'omonima opzione del
menu' "Visualizza". Ora dovresti vedere due progetti: "Normal" e "Project
(Documento1)". Come sai a noi interessa "Normal" che, per ora, possiede un
unico modulo, un modulo di classe di nome "ThisDocument", ovvero un oggetto
"Document" di genere (Kind) indefinito (wdDocumentNotSpecified). Ma questo,
per ora, ci interessa poco, perche' noi dobbiamo inserire un nuovo modulo:
    Inserisci > Modulo
Fatto questo, nella finestra "Gestione progetti" dovremmo vedere:
    Normal
        Modulo1
        ThisDocument
Rinominiamo, come dicevo la volta scorsa, Modulo1 in "MPrincipale", agendo
nella finestra "Proprieta'". E, dentro a questo modulo, incolliamo
finalmente il codice:
    Option Explicit
    Public Sub AutoExec()
        With Dialogs.Item(wdDialogFileNew)
            .Show
        End With
    End Sub
Tra parentesi, avremmo potuto tranquillamente scrivere:
    Public Sub AutoExec()
        Dialogs(wdDialogFileNew).Show
    End Sub
e sarebbe stato uguale, ma credo sia bene prendere subito confidenza con
With .. End With (vedi guida).
Non ci resta che compilare:
    Debug > Compila Normal
Salvare:
    File > Salva Normal
Tornare a Word:
    File > Chiudi e torna a Microsoft Word
Quindi chiudere e riaprire Word e... vedere cosa succede.
Al termine dei tuoi sbrodegamenti, sempre con word chiuso, rinominerai:
    normal.dot -> normal.esercizi
    normal.lavoro -> normal.dot
e salverai, seguendo la procedura su descritta, normal.esercizi nel
dischetto blu, ovviamente sostituendo nell'etichetta "lavoro" con
"esercizi".


"esercizi".
Salvato tutto il salvabile;
Adesso quale è la prossima lezione?
Prima di chiudere, vorrei chiederti una cosa, che però non c'entra nulla con
queste lezioni.
Stamattina in ufficio stavo smanettando un pò le macro che ho creato (ogni
tanto o mi accorgo di qualche buco, o mi viene in mente qualche miglioria);
chiudo l'editor, mi dà un errore di compilazione (in questo momento non me
lo ricordo). Visualizzo l'errore, e mi apre la schermata relativa al
ThisDocument, che per il modello Normal appare vuota, almeno sul PC di casa.
Qui invece c'è un listato; incuriosito, comincio a leggere, e pur non
capendo una beata mazza di VB, noto delle chiamate relative ad un
fantomatico file c:\ethan.___, che, se ricordo bene, è un bel virus. Su C:
infatti è presente il file. Allore blocco queste righe con le chiamate con
una bella serie di REM, e non mi dà più l'errore. Allora cancello il file da
C:, e mi viene in mente di provare a remmare anche le restanti righe del
listato. Il risultato è che mentre con i blocchi di prima tutto continuava a
funzionare, adesso invece il listato si è rigenerato, rigenerando anche il
file su C:. Tralasciando il come si sia infettato (deve risalire a molto
tempo fa), come faccio a pulire il PC dal virus? Prima avevamo un antivirus,
però l'ho tolto perchè ogni volta che lo si faceva partire massacrava tutte
le macro che avevo creato, poi mi sono rotto i cosiddetti  perchè ogni volta
mi toccava rifarle (anche esportando il file .bas e reimportandolo per
emergenza, non mi trovava le macro); ah, e non travava alcun virus.
Ciao
Andrea

 virus.
[...]
Penso ti convenga rivolgerti ai ng che trattano l'argomento. Ma, prima di
farli imbufalire, setaccia ben bene:
 
http://groups.google.com/advanced_group_search
e leggiti le faq dei ng.


Richiedono una buona conoscenza del vb e degli oggetti di word.
Bè, alla fin fine, sempre di VB si parla, no?
Ciao
Andrea

 [...]


Forse hai ragione, ho preteso troppo.
In ogni caso grazie per tutta la tua disponibilità.
A risentirci presto allora.
Ciao
Andrea