Newsgroup: it.comp.appl.access
Titolo: Access & Word

Domanda un po complessa...
esiste un tutorial su internet o degli esempi, dove, da un semplice click di
un bottone su una maschera di access
mi si apre Word e nei campi Cliente, indirizzo, etc mi prenda i record che
ho sulla aschera di Access?
esempio
Su access ho la maschera con i dati di Fiat Spa via Agnelli Torino
e sul Doc di Word nei campi Cliente etc ho i stessi dati
help help help
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 help help help
L'argomento è dibattuto spesso qui e il guru in
quest'argomento è Sergio MAZZA.
MAssimiliano

 ha scritto nel messaggio
news:U_RCc.9405$%l2....@news.edisontel.com...

c'è chiarissimo tutorial sull'argomento di gennaio.
L'oggetto era word e database, il tutto proveniva da namor, di fronte a cui
mi inchino, xè grazie a questo esempio mi ha risolto un bel po' di problemi.


--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


(regola di questo NG) scrivi il testo alla fine del messaggio, come faccio
io; grazie.
A parte il Guru; quello che chiedi è una funzionalità di word e si chiama:
"stampa unione".
Creati una query che ha come criterio di selezione la casella di testo della
form aperta (es. Select * from tabella where
idrecord=forms!nomeFormaperta!idrecord); il documento word lo associerai
(tramite la procedura guidata della stampa unione) alla query di access.
Sulla maschera crei un bottone che apre word + il tuo documento ed esegue la
stampa unione:
es.
Dim oApp As Word.Application
Set oApp = CreateObject("Word.Application")
oApp.Documents.Open "c:\documenti\nomeDocumento.doc"
With oApp.ActiveDocument.MailMerge
    .Destination = wdSendToNewDocument '<-- crea un nuovo documento
    .Execute '<-- esegue la stampa unione
End With
oApp.Visible = True
Inserisci prima i riferimenti (strumenti - riferimenti) alla libreria
Microsoft word...
Ciao.
P.S. Comunque sul sito comune c'è ogni "pezzo" per costruirti la macchina...
-- 
Sergio MAZZA

 ha scritto nel messaggio
news:cbh8h0$2rf$1...@canarie.caspur.it...

io ti avevo indirizzato ad un vecchio messaggio del ng.
Per trovare agevolmente dei vecchi messaggi, generalmente viene consigliato
google nella sezione gruppi.
Li cerchi it.comp.appl.access e ci fai tutte le ricerche ....


ho trovato molte cose...
e tutte non funzionavano..
poi ho capito perche...
io utilizzo Access2000 e Word2000
i codici gia posti su altri theread .... non sono compatibili con la mia
versione....che posso fare?????


 ha scritto nel messaggio

Puoi usare tutto! L'importante è settare i riferimenti alle librerie di
Word, 10 o 9 ...
Dalla finestra del codice , strumenti, riferimenti e scegli quella di Word.
Può essere che non sia stata selezionata la casella di spunta.


Iniziamo con non dare nulla per scontato e ad approfondire l'argomento dopo
che qualcuno ti ha indirizzato verso la soluzione...
Ciao.
-- 
Sergio MAZZA


--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


Allora....
il primo errore era che non avevo messo i riferimenti di office10...
Il codice è questo:
'-------------
Dim oApp As Word.Application
Set oApp = CreateObject("Word.Application")
oApp.Documents.Open "C:\Documenti\Doc1.doc"
'eseguo la stampa unione su un nuovo documento
With oApp.ActiveDocument.mailmerge
    .Destination = wdSendToNewDocument
    .Execute
End With
'rendo visibile word
oApp.Visible = True
End Sub
'-------------
poi però ho riscontrato questo errore
il file Doc1.doc si apre in modalità provvisoria perche dice che il file è
bloccato per cui apro una copia in sola lettura,
e mi crea un altro file chiamato Lettera tipo1.doc e parte sotto una UNIONE
DEI RECORD e macina macina macina record e blocco con il tasto ESC
Il file Doc1.doc nel frattempo ha messo il primo record del database e non
quello selezionato dalla maschera di access
dove stà l'errore??



Non hai creato una query che seleziona il record che ti interessa utilizzare
per la stampa unione, quest'ultima la devi associare al documento word.
Quando si aprirà il documento, word eseguirà la query che verrà filtrata in
base alle condizioni che hai impostato tu nei criteri...
Ciao.
-- 
Sergio MAZZA



ho la maschera con il record filtrato, ma non ho capito come si fa... ad
esportarlo su Word cioè su Word ho i campi unione collegati al database ma
come ho detto non so so come esportarlo :-(


 come ho detto non so so come esportarlo :-(
Non devi "esportare" nulla, devi eseguire la stampa unione; c'hai provato?
Ciao.
-- 
Sergio MAZZA


Allora...
io ho una maschera di Access
ho un record ottenuto da una query
clicco il bottone con questo codice:
Private Sub cmdWord_Click()
 
Dim oApp As Word.Application
Set oApp = CreateObject("Word.Application")
oApp.Documents.Open "C:\prove\doc1.doc"
'eseguo la stampa unione su un nuovo documento
With oApp.ActiveDocument.mailmerge
    .Destination = wdSendToNewDocument
    .Execute
End With
'rendo visibile word
oApp.Visible = True
Set oApp = Nothing
 
End Sub
Word mi apre il file doc ma mi dice che il file è di sola lettura e
impossibile apportare modifiche io dico apri in modalità di sola lettura
mi apre un nuovo file chiamato lettera tipo1.doc questo comincia a leggere
tutti i record (40.000)
io blocco con ESC
chiudo il file
nel frattempo il file doc1.doc mi da come record il numero1 cioè il primo
della lista
il file doc1.doc lo ho collegato alla tabella clienti del database, ho messo
i campi che mi interessano



Non alla tabella (maremma informatica) ma alla query devi collegare il
documento word...
Ciao.
-- 
Sergio MAZZA


io ho collegato il campo unione alla query con cui visualizzo i record sulla
maschera di access:
qry_clienti
SELECT Nominativi.ID, Nominativi.ID_Tipologia, Nominativi.Ragione_Sociale,
Nominativi.Indirizzo, Nominativi.Cap, Nominativi.Citta, Nominativi.Provincia
FROM Nominativi
ma il risultato è identico :-((((


 ma il risultato è identico :-((((
Mi farai morire!
E la condizione Where dov'è?
Ciao.
-- 
Sergio MAZZA


ho una maschera alla quale mi da dei record cliccando su questi record:
Private Sub Elenco_DblClick(Cancel As Integer)
Me!Lista = Null
    Dim strLista As String
    Dim strCriteri As String
    Dim varItem As Variant
    'Se non ci sono voci selezionate
    'non ci sono attività da effettuare
    If Me!Elenco.ItemsSelected.Count = 0 Then Exit Sub
    'Cicla nell'insieme delle voci selezionate
    For Each varItem In Me!Elenco.ItemsSelected
        'Cattura la colonna IDSocietà di ciascuna
        'voce selezionata
        strLista = strLista & _
            Me!Elenco.Column(0, varItem) & ","
        Me!Lista = Me!Lista & _
            Me!Elenco.Column(1, varItem) & ", "
    Next varItem
    'Elimina la virgola eccedente
    strLista = Left$(strLista, Len(strLista) - 1)
    Me!Lista = Left$(Me!Lista, Len(Me!Lista) - 2)
    'Apri la form clienti_estesa filtrando sulle
    'Ragioni Sociali selezionate
    strCriteri = "[ID] IN (" & strLista & ")"
    Dim stDocName As String
    stDocName = "clienti_estesa"
    DoCmd.OpenForm stDocName, acNormal, , strCriteri
    'Deseleziona tutte le righe della casella di riepilogo
    Dim Cont As Integer
    For Cont = 0 To Me!Elenco.ListCount - 1
        Me!Elenco.Selected(Cont) = False
    Next Cont
End Sub
la maschera aprendosi prende la query qry_clienti cosi formata:
SELECT Nominativi.ID, Nominativi.ID_Tipologia, Nominativi.Ragione_Sociale,
Nominativi.Indirizzo, Nominativi.Cap, Nominativi.Citta, Nominativi.Provincia
FROM Nominativi
e come filtro ho: [ID] IN (26461)(ho preso i dati da una maschera gia
filtrata)
dopodiche con un bottone non riesco a mandare il record selezionato a Word
:-((




Ahaaaa, utilizzi l'operatore In; allora ti conviene utilizzare una query di
creazione tabella così colleghi il file di word a questa tabella
(temporanea) che verrà creata ogni volta. Il codice lo esegui direttamente
nel clic del bottone:
Es.
Private Sub cmdWord_Click()
Dim oApp As Word.Application
Set oApp = CreateObject("Word.Application")
oApp.Documents.Open "C:\prove\doc1.doc"
'eseguo la queyr di creazione tabella
DoCmd.RunSQL "SELECT Nominativi.ID, Nominativi.ID_Tipologia,
Nominativi.Ragione_Sociale, " & _
"Nominativi.Indirizzo, Nominativi.Cap, Nominativi.Citta,
Nominativi.Provincia " & _
"INTO t_clienti_temp " & _
"FROM Nominativi " & _
"WHERE ID IN (" & Me!lista & ");"
'eseguo la stampa unione su un nuovo documento
With oApp.ActiveDocument.mailmerge
 .Destination = wdSendToNewDocument
 .Execute
End With
'rendo visibile word
oApp.Visible = True
End Sub
In Me!lista ci sono l'elenco degli ID da utilizzare come filtro?
Associa il documento word alla tabella creata "t_clienti_temp"...
Ciao.
-- 
Sergio MAZZA


Sergio... forse sono una rompimaroni ma mi da questo errore...
La tabella t_clienti_temp verra eliminata prima dell'esecuzione della query
poi do ok e mi dice
Errore di runtime 3009
si è tentato di bloccare la tabella t_clienti_temp in fase di apertura ma la
tabella non può essere bloccata perche attualmente in uso
e mi trovo word attivo ma non si apre e devo cancellare il processo


Sergio ecco come ho risolto e funziona:
------------------
Private Sub cmdWord_Click()
Dim oApp As Word.Application
'eseguo la query di creazione tabella
DoCmd.RunSQL "SELECT Nominativi.ID,
Nominativi.ID_Tipologia,Nominativi.Ragione_Sociale, " & _
"Nominativi.Indirizzo, Nominativi.Cap, Nominativi.Citta,Nominativi.Provincia
" & _
"INTO t_clienti_temp " & _
"FROM Nominativi " & _
"WHERE ID IN (" & Me!ID & ");"
Set oApp = CreateObject("Word.Application")
'eseguo la stampa unione su un nuovo documento
oApp.Documents.Open "C:\prove\doc1.doc"
With oApp.ActiveDocument.mailmerge
 .Destination = wdSendToNewDocument
 .Execute
End With
'rendo visibile word
oApp.Visible = True
End Sub
-----------------
ora ho un alert che vorrei eliminare ed è:
La tabella t_clienti_temp verrà eliminata prima dell'esecuzione della query
continuare comunque?
ecco io vorrei che per default facesse il tutto senza ogni volta cliccare il
tasto SI
dopodiche mi apre 2 file
il file doc1.doc che è quello di default e mi apre pure il file Lettere
Tipo1.doc con i dati inseriti corretti
Il primo ha i campi unione con i dati corretti mentre il secondo solo i dati
corretti ma non con i campi unione ( spero che mi hai capita, a me basta 1
solo file è indifferente quale dei due visto che comunque i dati inseriti
sono corretti


 e mi trovo word attivo ma non si apre e devo cancellare il processo
Scusa è colpa mia; la tabella è bloccata perchè è utilizzata da word;
bisogna invertire i passaggi:
Private Sub cmdWord_Click()
On error goto cmdWord_err '<-- gestione dell'errore
 Dim oApp As Word.Application
 Set oApp = CreateObject("Word.Application")
 'eseguo la query di creazione tabella
 DoCmd.RunSQL "SELECT Nominativi.ID, Nominativi.ID_Tipologia,
 Nominativi.Ragione_Sociale, " & _
 "Nominativi.Indirizzo, Nominativi.Cap, Nominativi.Citta,
 Nominativi.Provincia " & _
 "INTO t_clienti_temp " & _
 "FROM Nominativi " & _
 "WHERE ID IN (" & Me!lista & ");"
'apro il documento
 oApp.Documents.Open "C:\prove\doc1.doc"
 'eseguo la stampa unione su un nuovo documento
 With oApp.ActiveDocument.mailmerge
 .Destination = wdSendToNewDocument
 .Execute
 End With
 'rendo visibile word
 oApp.Visible = True
cmdWord_exit:
    exit sub
cmdWord_err:
    Set oApp = nothing
    msgbox "Errore " & err.number & ", " & err.description
 End Sub
Ho inserito la gestione dell'errore ed invertito l'apertura del documento
word, l'ho messa dopo la creazione della tabella.
Ciao.
--
Sergio MAZZA


Sergio utilizzo questo codice ed elimino il mio :-)
però le altre cose rimangono:
ora ho un alert che vorrei eliminare ed è:
"La tabella t_clienti_temp verrà eliminata prima dell'esecuzione della query
continuare comunque?"
ecco io vorrei che per default facesse il tutto senza ogni volta cliccare il
tasto SI
dopodiche mi apre 2 file
il file doc1.doc che è quello di default e mi apre pure il file Lettere
Tipo1.doc con i dati inseriti corretti
Il primo ha i campi unione con i dati corretti mentre il secondo solo i dati
corretti ma non con i campi unione ( spero che mi hai capita), a me basta il
file di default (doc1.doc) perche all'interno ha dei campi che devo
aggiornare (indice, data; numeri pagina etc.)


 ha scritto nel messaggio
news:80Z18Z72Z164Y1...@usenet.libero.it...

Bene, l'avviso di creazione tabella lo togli con il metodo SetWarnigs
True/False; ti ritrovi due documenti perché il primo (doc1.doc) è utilizzato
come master per creare "Lettere tipo1.doc". In pratica la stampa unione non
modifica il documento master (doc1.doc) ma ti crea nuovi documenti o li
stampi direttamente senza crearli.
------------------
Private Sub cmdWord_Click()
On error goto cmdWord_err '<-- gestione dell'errore
Dim oApp As Word.Application
'non visualizzo gli avvisi
Docmd.SetWarnings False
'eseguo la query di creazione tabella
DoCmd.RunSQL "SELECT
Nominativi.ID,Nominativi.ID_Tipologia,Nominativi.Ragione_Sociale, " & _
"Nominativi.Indirizzo, Nominativi.Cap,
Nominativi.Citta,Nominativi.Provincia" & _
"INTO t_clienti_temp " & _
"FROM Nominativi " & _
"WHERE ID IN (" & Me!ID & ");"
'visualizzo gli avvisi
Docmd.SetWarnings True
Set oApp = CreateObject("Word.Application")
'eseguo la stampa unione su un nuovo documento
oApp.Documents.Open "C:\prove\doc1.doc"
With oApp.ActiveDocument.mailmerge
 .Destination = wdSendToNewDocument
 .Execute
End With
'chiudo il documento master senza salvare le modifiche
oApp.Documents(2).Close False
'rendo visibile word
oApp.Visible = True
cmdWord_exit:
    exit sub
cmdWord_err:
    docmd.setwarnings true
    Set oApp = nothing
    msgbox "Errore " & err.number & ", " & err.description
End Sub
-----------------
Ciao.
-- 
Sergio MAZZA