PDA

View Full Version : [WORD 2003] File Word variabile


niofar
04-04-2008, 07:54
Buongiorno,
vorrei chiedere a voi che siete esperti in materia, qual'è la via più breve per realizzare ciò che è in oggetto. Vorrei realizzare un'applicazione molto semplice composta da due o tre finestre da compilare. I dati immessi in queste finestre devono andare a sostituire variabili presenti all'interno di un file word di riferimento ed alla fine devo dare, nell'ultima finestra dell'applicazione, l'opportunità di stampare o salvare con un altro nome il file word modificato.

Vorrei un consiglio su come fare, premettendo che non sono un programmatore, ma avrei voglia di iniziare a vedere qualcosa o in Visual Basic o in C#.
Se c'è una via più breve e comoda per realizzare questa cosa tanto meglio.

Grazie

nuovoUtente86
04-04-2008, 11:11
Io faccio qualcosa di simile attraverso i Report del framework.Net, ma occorre la versione professionale di Visual Studio.

niofar
04-04-2008, 11:26
Io faccio qualcosa di simile attraverso i Report del framework.Net, ma occorre la versione professionale di Visual Studio.

Grazie, non c'è qualcosa di meno "costoso" che potrei utilizzare?

nuovoUtente86
04-04-2008, 11:50
Credo si possa fare anche con un IDE free per i linguaggi VB e C# .net che si chiama SharpDevelop ma non ho mai utilizzato in tal senso!Inoltre dovrebbe utilizzare per i report un formato diverso da quello microsoft.

niofar
04-04-2008, 11:59
Credo si possa fare anche con un IDE free per i linguaggi VB e C# .net che si chiama SharpDevelop ma non ho mai utilizzato in tal senso!Inoltre dovrebbe utilizzare per i report un formato diverso da quello microsoft.

Ok, l'ho trovato e penso di fare qualche prova con questo. Ti ringrazio per le risposte.

PS Mi consigli di "iniziare" con C# o VB? Diciamo che ho un bel po' di materiale sul C# su cui studiare, ma accetto consigli in senso contrario da quelli che li conoscono entrambi. Comunque sia spero che qualche conoscenza rispolverata di C++ possa aiutarmi ad imparare in fretta.

Ciao

nuovoUtente86
04-04-2008, 12:03
Personalmente preferisco il VB, ma non ci sono differenze cosi enormi tra i 2!Concettualmente la conoscenza,seppur minima del C++ puo aiutarti.

71104
04-04-2008, 12:29
vedi se riesci a cavare qualcosa qua in mezzo... :stordita:
http://msdn2.microsoft.com/en-us/library/bb244515.aspx

niofar
04-04-2008, 14:06
vedi se riesci a cavare qualcosa qua in mezzo... :stordita:
http://msdn2.microsoft.com/en-us/library/bb244515.aspx

Grazie 1000, adesso gli do un'occhiata.

Personalmente preferisco il VB, ma non ci sono differenze cosi enormi tra i 2!Concettualmente la conoscenza,seppur minima del C++ puo aiutarti.

Grazie nuovoUtente86, sei stato molto gentile.

MarcoGG
04-04-2008, 17:46
qual'è la via più breve per realizzare ciò che è in oggetto. Vorrei realizzare un'applicazione molto semplice composta da due o tre finestre da compilare. I dati immessi in queste finestre devono andare a sostituire variabili presenti all'interno di un file word di riferimento ed alla fine devo dare, nell'ultima finestra dell'applicazione, l'opportunità di stampare o salvare con un altro nome il file word modificato.


Allora non c'è nessun bisogno di scomodare .NET, editor esterni per VB o C#, e tantomeno il C++.
Quello che vuoi tu è un modello di documento Word "Preformattato", con alcuni spazi in cui inserire, attraverso una o più form ( una specie di "procedura guidata" ), i valori desiderati...
Beh, la via più breve c'è eccome e tutto questo si può fare direttamente in Word-VBA...
Tutto ciò che serve è predisporre per bene il documento modello, e usare i "famosi" bookmarks di Word.
Se ti interessa questo tipo di soluzione, fammi sapere...

P.S.: Meglio rinominare questo thread, magari specificando anche la versione di Word che vuoi utilizzare,
ad esempio >> [WORD 2003] File Word variabile .

gugoXX
04-04-2008, 17:56
C'e' ancora un metodo da valutare... gia' pronto.
Si chiama "Stampa Unione", integrato direttamente dentro Word.

Praticamente crei un opportuno template (non un vero template di word, un normalssimo documento), poi crei il documento con i dati, clicchi su "stampa unione" e ottieni gia' quanto ti serve.

Tipico esempio e' la "lettera" da spedire customizzata con nome, cognome e indirizzo, a tutti i tuoi clienti.
Oppure per stampare le etichette, con analoghi requisiti...
Penso sia la stessa cosa scritta da MarcoGG, ma non devi neppure scomodare VBA.

nuovoUtente86
04-04-2008, 23:23
io ho adottato quel tipo di soluzione descritto perchè il file word doveva rappresentare l' output delle eleborazioni fatte da un programma.

niofar
08-04-2008, 09:30
Allora non c'è nessun bisogno di scomodare .NET, editor esterni per VB o C#, e tantomeno il C++.
Quello che vuoi tu è un modello di documento Word "Preformattato", con alcuni spazi in cui inserire, attraverso una o più form ( una specie di "procedura guidata" ), i valori desiderati...
Beh, la via più breve c'è eccome e tutto questo si può fare direttamente in Word-VBA...
Tutto ciò che serve è predisporre per bene il documento modello, e usare i "famosi" bookmarks di Word.
Se ti interessa questo tipo di soluzione, fammi sapere...

P.S.: Meglio rinominare questo thread, magari specificando anche la versione di Word che vuoi utilizzare,
ad esempio >> [WORD 2003] File Word variabile .

Ciao, mi interesserebbe sapere come..., se posso ad esempio creare alcune schermate da compilare che poi mi possano modificare il file word.
Grazie

MarcoGG
08-04-2008, 11:01
Ciao, mi interesserebbe sapere come..., se posso ad esempio creare alcune schermate da compilare che poi mi possano modificare il file word.
Grazie


Perfetto. Vedo che il thread è stato rinominato e che usi Word 2003. Ottimo.

Allora, più che un "trenino" di UserForms, meglio usare una Form unica, magari navigabile con un sistema multipagina ( controllo VBA "Multipage" ).

Crei una tabella sul modello Word, con alcuni campi vuoti in cui inserisci i segnalibri ( bookmarks ).

Quando tutti i campi della Form sono compilati, sulla Form stessa è possibile cliccare su un pulsante apposito che procede all'inserimento dati nel doc.

Esempio. :
- su doc. ho uno spazio con un segnalibro chiamato "bmk_nome".
- su Form ho una TextBox chiamata "txt_nome".
>> Il codice essenziale per trasferire il nome da Form a doc. premendo il pulsante sulla Form è :

Selection.GoTo What:=wdGoToBookmark, Name:="bmk_nome"
Selection.TypeText Text:=txt_nome.Text

Fammi sapere... ;)

niofar
08-04-2008, 11:24
Perfetto. Vedo che il thread è stato rinominato e che usi Word 2003. Ottimo.

Allora, più che un "trenino" di UserForms, meglio usare una Form unica, magari navigabile con un sistema multipagina ( controllo VBA "Multipage" ).

Crei una tabella sul modello Word, con alcuni campi vuoti in cui inserisci i segnalibri ( bookmarks ).

Quando tutti i campi della Form sono compilati, sulla Form stessa è possibile cliccare su un pulsante apposito che procede all'inserimento dati nel doc.

Esempio. :
- su doc. ho uno spazio con un segnalibro chiamato "bmk_nome".
- su Form ho una TextBox chiamata "txt_nome".
>> Il codice essenziale per trasferire il nome da Form a doc. premendo il pulsante sulla Form è :

Selection.GoTo What:=wdGoToBookmark, Name:="bmk_nome"
Selection.TypeText Text:=txt_nome.Text

Fammi sapere... ;)

Ok, quando esco da lavoro ci provo, intanto ti ringrazio :cincin:

EDIT Non ho resistito...hihi, funziona!!!

Il problema è poter fare una form carina e poter salvare con un altro nome il documento modificato, per non intaccare il modello word. Quando modifico il segnalibro infatti questo scompare e non poso più ripetere l'operazione (run time 5101, il segnalibro non esiste)
PS Sei un grande!!!

MarcoGG
08-04-2008, 12:51
Il problema è poter fare una form carina e poter salvare con un altro nome il documento modificato, per non intaccare il modello word. Quando modifico il segnalibro infatti questo scompare e non poso più ripetere l'operazione (run time 5101, il segnalibro non esiste)
PS Sei un grande!!!


:)
Beh, ma io infatti non ti ho detto di modificare alcun bookmark. Il fatto che tu scriva dove c'è un bookmark non dovrebbe cancellarlo... :mbe:

In ogni caso, per salvare con nome desiderato il doc compilato, ad esempio puoi aggiungere una TextBox alla Form, che chiamerai "txt_nomedoc", e che dovrà contenere il nome desiderato del file ( nome secco, senza il ".doc" ).

Il codice essenziale per far questo va messo per ultimo, in coda a tutto il blocco che esegue gli inserimenti... :

Dim percorso As String
percorso = ThisDocument.Path & "\"
ThisDocument.SaveAs percorso & txt_nomedoc.Text & ".doc"

Questo risolve allo stesso tempo l'eventuale problema della sparizione dei segnalibri dal doc modello.
Prova... ;)

niofar
01-07-2008, 14:56
Ciao MarcoGG

mi ero dimenticato di avvisarti che funzionava tutto alla perfezione.
Ho creato una userform che si avvia in automatico al'apertura del file
In Thisdocument ho inserito

Private Sub Document_Open()
Application.WindowState = wdWindowStateMinimize 'minimizzo il word
UserForm1.Show (0) 'carico la user
End Sub

e poi, come dicevi tu inserendo un comando nella userform

Dim percorso As String
percorso = ThisDocument.Path & "\"
ThisDocument.SaveAs percorso & txt_salva.Text & ".doc"

riesco a salvare il file.
Il problema è che ogni volta che apro il nuovo file salvato mi parte la userform del file originale...non voglio che accada questo, come faccio?
E se volessi stampare il file, o salvarlo in pdf?

Grazie

niofar
07-07-2008, 17:14
UPPP PLEASE

niofar
14-07-2008, 09:00
Ciao, scusate, ripropongo la domanda per tutti, in modo generico. Vorrei creare un comando che salva con nome senza le macro, cioè salva solamente il testo.
Come posso fare?

Grazie

MarcoGG
21-07-2008, 09:59
Ciao MarcoGG
...
...

Il problema è che ogni volta che apro il nuovo file salvato mi parte la userform del file originale...non voglio che accada questo, come faccio?


Un metodo immediato è fare un controllo sul nome del file stesso.
Es.: il nome dei files generati può avere un suffisso particolare, come una carattere "_". All'avvio del file il codice che mostra la Form, esegue un controllo sul nome...

niofar
24-07-2008, 08:32
Un metodo immediato è fare un controllo sul nome del file stesso.
Es.: il nome dei files generati può avere un suffisso particolare, come una carattere "_". All'avvio del file il codice che mostra la Form, esegue un controllo sul nome...

Grazie MarcoGG, ma cambiando il nome del file tornerebbe il "problema", o no?

MarcoGG
28-07-2008, 10:30
Grazie MarcoGG, ma cambiando il nome del file tornerebbe il "problema", o no?

No. Quello che intendevo io è qualcosa che assomiglia a questo :

Private Sub Document_Open()

If Left(ThisDocument.Name, 1) = "_" Then
CommandButton1.Width = 1
CommandButton1.Height = 1
CommandButton1.Enabled = False
Else
CommandButton1.Width = 72
CommandButton1.Height = 24
CommandButton1.Enabled = True
End If

End Sub

Quando salvi i files generati dalla procedura che avevamo visto, semplicemente anteponi al nome un suffisso, nel mio caso un semplice underscore : "_" . Ovviamente questo suffisso NON è presente nel file che serve a generare gli altri, ossia quello che deve mostrare la Form.
Mi pare di ricordare che sul documento c'era un pulsante che serviva ad aprire la UserForm... Bene, il controllo parte ad ogni avvio del documento.
Se il nome del file inizia col suffisso ( "_" ), ci troviamo su un file "generato", il pulsante ( CommandButton1 ) sarà inutilizzabile.
Purtroppo in Word, non chiedermi il perchè, non si può fare un semplice
CommandButton1.Visible = False
Ecco il perchè del mio codice. ;)

niofar
30-07-2008, 08:37
No. Quello che intendevo io è qualcosa che assomiglia a questo :

Private Sub Document_Open()

If Left(ThisDocument.Name, 1) = "_" Then
CommandButton1.Width = 1
CommandButton1.Height = 1
CommandButton1.Enabled = False
Else
CommandButton1.Width = 72
CommandButton1.Height = 24
CommandButton1.Enabled = True
End If

End Sub

Quando salvi i files generati dalla procedura che avevamo visto, semplicemente anteponi al nome un suffisso, nel mio caso un semplice underscore : "_" . Ovviamente questo suffisso NON è presente nel file che serve a generare gli altri, ossia quello che deve mostrare la Form.
Mi pare di ricordare che sul documento c'era un pulsante che serviva ad aprire la UserForm... Bene, il controllo parte ad ogni avvio del documento.
Se il nome del file inizia col suffisso ( "_" ), ci troviamo su un file "generato", il pulsante ( CommandButton1 ) sarà inutilizzabile.
Purtroppo in Word, non chiedermi il perchè, non si può fare un semplice
CommandButton1.Visible = False
Ecco il perchè del mio codice. ;)

Ciao, ti ringrazio,
Quello che intendevo dire io è che se modifico successivamente il file generato e tolgo l'underscore, mi riparte la userform (che nel file "generatore" faccio partire in automatico all'apertura del file).

Ciao

EDIT
Ho fatto così, il file generatore l'ho chiamato _Gen.doc, così ogni volta che si apre parte la user form in automatico.I file generati non avranno l'underscore davanti e la userform non partirà.

Private Sub Document_Open()
If Left(ThisDocument.Name, 1) = "_" Then
Application.WindowState = wdWindowStateMinimize 'minimizzo il word
UserForm1.Show (0) 'carico la user
End If

End Sub

Che ne pensi?

Grazie ancora, senza il tuo aiuto non sarei arrivato a niente.

MarcoGG
30-07-2008, 10:49
...
...
Che ne pensi?

Grazie ancora, senza il tuo aiuto non sarei arrivato a niente.


Sì, hai fatto come ti ho detto io ma la contrario. Non mi ricordavo che facevi partire la UserForm all'avvio del doc. In sostanza il metodo è quello lì. :)

niofar
30-07-2008, 11:06
Sì, hai fatto come ti ho detto io ma la contrario. Non mi ricordavo che facevi partire la UserForm all'avvio del doc. In sostanza il metodo è quello lì. :)

Ciao, si, te l'ho detto che senza il tuo aiuto non sarei arrivato a nulla. In effetti non avevo scritto che facevo partire la userform all'avvio e neanche che minimizzavo il file word subito.

Grazie mille.