Newsgroup: it.comp.appl.access
Titolo: Aiuto con pulsante di comando

Salve, ho un problema con microsoft access. Io non me ne intendo molto di
programmazione, quindi magari è più semplice di quanto penso, ad ogni modo
non ci sono riuscito.
allora, il mio problema è questo: io gestisco il database di
un'associazione, con circa 2000 records.
Quello di cui ho bisogno, è che da una maschera, tramite un pulsante di
comando venga aperta una sessione di Word, con un modello di documento
caricato, nella fattispecie una lettera, che abbia nell'intestazione
(caro...) il nome ed il cognome del record visualizzato nella maschera
quando si è premuto il pulsante.
E' possibile fare una cosa del genere? grazie in anticipo a tutti.
Velio Pazzagli

 ha scritto nel messaggio
news:vUl86.51363$eB2.4...@news.infostrada.it...

Se intendi stampare una lettera nella quale variare solo i dati personali
(nome, indirizzo, quota iscrizione ...) allora potresti agire come segue:
- Ti crei un documento Word che sarà la tua lettera tipo;
- Sul menu strumenti, seleziona stampa unione (meglio se dai uno sguardo
all'help a tale voce);
- Se vuoi richiamare il documento Word alla pressione di un tasto sulla
maschera Access, il codice da inserire è il seguente:
    Dim oApp As Object
    Set oApp = CreateObject("Word.Application")
    oApp.Visible = True
    oApp.WindowState = 1
    oApp.Run MacroName:="Macro per stampa"
dove la macro indicata all'ultima riga effettua la stampa unione e dovrebbe
contenere un'istruzione del genere:
    With ActiveDocument.MailMerge
        .Destination = wdSendToNewDocument
        .MailAsAttachment = False
        .MailAddressFieldName = ""
        .MailSubject = ""
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=True
    End With
Ciao
LaLo

Allora, grazie per l'aiuto, ma c'è qualcosa che non capisco.
Il documento word è ok, la stampa unione non è un problema.
per inserire il codice che mi hai detto in access, devo selezionare le
proprietà del comando, scegliere routine evento su clic e inserire il codice
nella finestra dell'editor visual basic, giusto?
ma ora, come faccio a dire che deve aprire proprio il documento word che io
ho creato in precedenza? e soprattutto, il codice della macro, dove devo
inserirlo?
grazie.


La pacro successiva è una macro di Word. Prima della stampa unione devi
aprire il documento con un comando del genere:
    Documents.Open FileName:="Lettera.doc", ConfirmConversions:=False, _
        ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", _
        PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _
        WritePasswordTemplate:="", Format:=wdOpenFormatAuto
La macro puoi scriverla con il VBA di Word (Strumenti-> Macro->Editor di
Visual Basic).
HTH
LaLo

"LaLo" <reg...@LLtin.it> ha scritto nel messaggio
news:93ukuc$t5l$1...@pluto.sm.dsi.unimi.it...
[CUT]
Scusa ma mi sono accorto che non ho spiegato bene. La riga:
oApp.Run MacroName:="Macro per stampa"
che ti ho postato precedentemente, esegue una macro di Word. In questa macro
devi aprire il documento che ti interessa (vedi il post precedente) e poi
eseguire una stampa unione.
LaLo





Ciao, io ho risolto in questo modo:


ho creato un a query che praticamente fa da filtro impostando 
nel campo Id il criterio (attraverso il generatore di espressione) 
[Forms]![Mia_Maschera]![ID], dove ovviamente Mia_Maschera (che contiene, Nome, 
cognome...) è quella nella quale ho inserito un pulsante di comando generando,in 
parte con l'ausilio della creazione guidata, il seguente Codice a fronte 
dell'evento click:


 


Private Sub Comando21_Click()
On Error GoTo 
Err_Comando21_Click


 


     Dim oApp As Object


    Set oApp = 
CreateObject("Word.Application")
   'questo comando ti permette di 
eseguire l'applicazione word aprendo 
StampaUnione.doc    


   oApp.Application.Documents.Open 
"c:\documenti\StampaUnione.doc"
    oApp.Visible = 
True


Exit_Comando21_Click:
    Exit 
Sub


Err_Comando21_Click:
    MsgBox 
Err.Description
    Resume Exit_Comando21_Click
 
   
End Sub
E' sicuramente più rozzo della soluzione 
offerta da Lalo, anzi rozzissimo ma assicura il funzionamente per chi come noi 
due( scusa se mi permetto) ne capiscono poco di programmazzione e cercano di 
ottenere un risultato;


forse è questa la differenza fra un programmatore ed un Buon 
programmatore,


Ciao



 ha scritto nel messaggio
news:000601c07f15$78eccec0$0700...@tiscalinet.it...
Ciao, io ho risolto in questo modo:
ho creato un a query che praticamente fa da filtro impostando nel campo Id
il criterio (attraverso il generatore di espressione)
[Forms]![Mia_Maschera]![ID], dove ovviamente Mia_Maschera (che contiene,
Nome, cognome...) č quella nella quale ho inserito un pulsante di comando
generando,in parte con l'ausilio della creazione guidata, il seguente Codice
a fronte dell'evento click:
Private Sub Comando21_Click()
On Error GoTo Err_Comando21_Click
    Dim oApp As Object
    Set oApp = CreateObject("Word.Application")
   'questo comando ti permette di eseguire l'applicazione word aprendo
StampaUnione.doc
   oApp.Application.Documents.Open "c:\documenti\StampaUnione.doc"
   oApp.Visible = True
Exit_Comando21_Click:
   Exit Sub
Err_Comando21_Click:
   MsgBox Err.Description
   Resume Exit_Comando21_Click
End Sub
E' sicuramente piů rozzo della soluzione offerta da Lalo, anzi rozzissimo ma
assicura il funzionamente per chi come noi due( scusa se mi permetto) ne
capiscono poco di programmazzione e cercano di ottenere un risultato;
forse č questa la differenza fra un programmatore ed un Buon programmatore,
Ciao
==============
La soluzione che hai proposto non č dissimile da quella che avevo postato.
La differenza č che dopo aver creato l'oggetto Word, apri il documento,
mentre io avevo proposto di eseguire una macro di Word.
Ciao
LaLo


Invece direi il contrario; la tua soluzione prevede l'uso di codice da parte
access + word, mentre quella proposta da "ILC CARRARA" solo da parte access.
Questo ti porta ad avere una semplificazione della "costruzione" del
documento word preoccupandoti solamente dell'abbinare la giusta fonte dati e
i campi necessari per la stampa unione...
Ciao.

Allora, inserendo il codice suggerito da ILC CARRARA, riesco ad aprire il
documento, ma la stampa unione non avviene automaticamente con il nome che č
presente in quel momento sulla maschera, bensě con il primo record del
database.
Non ho ben capito dove va inserito il codice [Forms]![Mia_Maschera]![ID]
ti dispiacerebbe rispiegarmelo? tu fai una query, giusto? ma poi devi anche
aggiungere il campo ID al database?

 ha scritto nel messaggio
news:0Ze96.71296$eB2.5...@news.infostrada.it...

Oltre al fatto che sul sito comune trovi quello che cerchi (e ancora di
piů), questo č un altro esempio:
'---------------------
Sub ApriWordperMailmerge()
Dim oDoc As Word.Document
Set oDoc = CreateObject("Word.Document")
oDoc.Application.Documents.Open "c:\documenti\NomeDocumento.doc"
With oDoc.MailMerge
    .Destination = wdSendToNewDocument
    .Execute
End With
oDoc.Close
Set oDoc = Nothing
End Sub
'--------------------
Ciao.

 più)
Io sul sito comune non sono riuscito a trovarlo...


http://members.xoom.it/_XOOM/it_db_access/tips34.htm
Ciao.

Perfetto, quel codice lo avevo trovato.
adesso, il mio problema è che non deve scrivere un testo dl nulla (hello
word, nell'esempio) bensì inserire nell'intestazione della lettera che già
esiste, nome e cognome presenti sulla maschera nel momento in cui io premo
il pulsante...
si può fare?

 ha scritto nel messaggio
news:OaU96.87040$eB2.6...@news.infostrada.it...

Secondo me il problema è un'altro; forse non sai come funziona la stampa
unione di word.
- prepari una query (chiamiamola informativa) che contiene i dati che dovrai
visualizzare sul documento word;
- nella struttura della query ci inserisci il riferimento al controllo sulla
maschera che ti serve per filtrare i dati; per esempio la casella di testo
[nominativo]. Il riferimento nella colonna (della query) con il campo
"nominativo" alla riga "criteri" ci inserisci: (esempio)
forms!nomeMaschera!nominativo;
- con word prepari il documento, diciamo che si chiama "informativa.doc";
- scrivi il testo della lettera: "Egr. la informiamo che il suo abbonamento
scade il , restiamo a sua disposizione...";
- poi menù Strumenti - stampa unione - "documento principale" crea lettera
tipo - finestra attiva - dati - apri origine dati - tipo file *.mdb - ci
associ l'mdb e scegli la query "informativa" - ok - chiudi; ti sarai accorto
che si è aggiunta una barra strumenti che presenta (da sinistra a destra) li
bottone "inserisci campo unione"; lo premi e vedrai l'elenco dei campi che
avevi inserito nella query.
Non fai altro che posizionarti nel punto dove vuoi inserire i dati e
inserire il campo unone, es: "Egr. <<Nominativo>> la informiamo che il suo
abbonamento scade il <<dataScadenza>>, restiamo a sua disposizione...";
chiudi e salvi;
L'esempio che ti ho inviato non scrive nulla sul documento perché ci pensa
word a leggere i dati e crearti il nuovo documento tramite la "stampa
unione" (mailmerge).
Ciao.