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

Salve a tutti!
eccomi col solito "tormentone"...........
da una maschera inserisco dei nominativi dalla tabella "Nomi" e, all'evento 
clic di un pulsante, ho creato questa routine:
    Dim oapp As Object
    DoCmd.RunCommand acCmdSaveRecord
    Set oapp = CreateObject("Word.Application")
    With oapp
    .documents.Open "c:\documenti\LAVORO\opfs.doc"
    .Visible = True
    .PrintOut
    .Quit
    End With
    Set oapp = Nothing
Questa tabella "Nomi", è inserita nel documento "opfs.doc" ma, purtroppo, 
Word non aggiorna il campo "Nomi". Sono costretto ad aprire direttamente, da 
Word, il documento, selezionare la tabella e premere l'icona di 
aggiornamento sulla barra delle applicazioni database (e a dire che mi 
funzionava tutto bene soprattutto con Word 2000).
Qualche autorevole suggerimento?
Grazie anticipatamente.
Marco.
P.S. - Uso Access '97 e Word 2003 

Mark ha scritto:

Prova così:
oapp.Selection.WholeStory
oapp.Selection.Fields.Update

 ha scritto nel messaggio 
news:1155192452.8...@p79g2000cwp.googlegroups.com...
Mark ha scritto:

Prova così:
oapp.Selection.WholeStory
oapp.Selection.Fields.Update
Grazie per la cortese collaborazione.
Il suggerimento funziona (tranne per due piccoli particolari) alla grande 
ma.......... per colpa mia ho dimenticato di scrivere qualcos'altro:
il documento di Word, in questione, oltre ad essere associato ad una tabella 
del database di Access '97, è anche associato con una origine dati dalla 
barra di applicazioni "Stampa Unione".
I due "piccoli" problemini sono:
quando invio la stampa, si apre il documento con evidenziato tutto e 
chiedendomi di salvare il file. Stampa perfetta ma..........i campi della 
stampa unione sono in modalità "struttura" e, ovviamente, non contengono i 
dati ma solo i riferimenti.
Siamo vicini alla perfetta soluzione e, cioè, stampare in tutta 
tranquillità, in background, il documento in questione.
Resto in fiduciosa attesa per la risoluzione di quanto sopra.
Grazie ancora.
Marco. 

Mark ha scritto:

    OAPP.ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wdToggle
In linea di massima per eseguire via codice VBA operazioni in WORD, non
fai altroche registrare una macro in word e copiare il codice che ne
risulta in ACCESS aggiungendo all'inizio di ogni riga OAPP.

 ha scritto nel messaggio 
news:1155218600.4...@m73g2000cwd.googlegroups.com...
Mark ha scritto:

    OAPP.ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wdToggle

Allora:
wdToggle non viene riconosciuta - "variabile sconosciuta";
dove trovo tutte le istruzioni disponibili tipo .printout - .visible= true - 
.quit - con With oapp ?
Grazie ancora.
Marco.

 Marco.
Nell'help in linea del VBA di word (attivabile con ALT-F11 poi F1); altrimenti qui:
http://msdn.microsoft.com/office/reference/vba/
Ciao.
-- 
Sergio MAZZA

 ha scritto nel messaggio 
news:ebhb6v$dge$1...@area.cu.mi.it...

Bentrovato, Egregio Sergio,
ricapitolando, sembra che il codice aggiunto da BR1 funge ma mi da l'errore 
"Variabile non definita" su WdToggle.
==============================================
Private Sub Comando26_Click()
    Dim oapp As Object
    DoCmd.RunCommand acCmdSaveRecord
    Set oapp = CreateObject("Word.Application")
    With oapp
    .documents.Open "c:\documenti\LAVORO\opfs.doc"
    oapp.Selection.WholeStory
    oapp.Selection.Fields.Update
    oapp.ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wdtoggle
    .Visible = True
    .PrintOut
    .Quit
    End With
    Set oapp = Nothing
End Sub
=============================================
Ho cercato di "dimensionarla" con una Long, oppure Var oppure Obj ma, 
niente!
Suggerimenti?
Grazie della cortese collaborazione.
Marco. 

 Marco.
Ciao.
-- 
Sergio MAZZA 

Esimio Sergio,
da strumenti>riferimenti, o flaggato Microsoft Word Object 11.0;
ho inserito le 2 righe di codice, da te suggerite;
ho dichiarato wdtoggle come oggetto (non so se ho sbagliato o meno)
ma l'errore persiste sulla riga
---------------------------
oapp.ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wdtoggle
---------------------------
ho aperto il visualizzatore di oggetti, di MsAccess, ma non vedo l'oggetto 
da me dichiarato (wdtoggle).
Questo č il nuovo codice:
Private Sub Comando26_Click()
    Dim oapp As Word.Application
    Dim wdtoggle As Object
     Me.Refresh
    Set oapp = CreateObject("Word.Application")
    With oapp
    .documents.Open "c:\documenti\LAVORO\opfs.doc"
    oapp.Selection.WholeStory
    oapp.Selection.Fields.Update
    oapp.ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wdtoggle
    .Visible = True
    .PrintOut
    .Quit
    End With
    Set oapp = Nothing
End Sub
Non so piů che fare. E a dire che molto tempo fa questo codice, senza 
l'aiuto di BR1, funzionava alla grande con l'accoppiata Acess '97 e Word 
2000. Perchč su nessun pc, adesso, non funge piů? quando mandavo in stampa, 
oltre che aggiornare i campi automaticamente, non avevo neanche il fastidio 
di vedermi, per un attimo, word aprirsi e richiudersi.
Mah........!? misteri Microsoft!!!!!!!!!!!!!
Grazie della cortese attenzione e resto in attesa di un autorevole aiuto.
Marco. 

Cari "smanettoni",
finalmente ho capito perchè non funge più questo codice:
Private Sub Comando26_Click()
    Dim oapp As Object
    DoCmd.RunCommand acCmdSaveRecord
    Set oapp = CreateObject("Word.Application")
    With oapp
    .documents.Open "c:\documenti\LAVORO\opfs.doc"
    .Visible = True
    .PrintOut
    .Quit
    End With
    Set oapp = Nothing
End Sub
il problema sta nel fatto che questo codice va bene SOLO se si apre il 
documento con Word 2002. Purtroppo con le versioni successive, non aggiorna 
i campi automaticamente.
Ho cercato anche con Word 2003 e, nelle impostazioni, mettere compatibilità 
con Word 2002, ma..........NISBA!
Ho cercato di convertire l'.mdb di Access '97 in Access 2003, con Word 2003 
e il documento con compatibilità 2002, ma ........ NISBA!
Ho cercato di caricare, in Access '97, il riferimento Microsoft Word 10.0 
Objects Library, ma.........NISBA!
Purtroppo sembra inevitabile, per il funzionamento "ad hoc" del codice 
suesposto, installare Word 2002 ed aprirlo con quest'ultimo!
Attendo autorevoli smentite/suggerimenti!
Grazie per la cortese collaborazione.
Marco.

 aggiorna i campi automaticamente.
cut
Questo funziona con Word 2003:
Dim oapp As Object
    DoCmd.RunCommand acCmdSaveRecord
    Set oapp = CreateObject("Word.Application")
    With oapp
    .Documents.Open FileName:="c:\documenti\LAVORO\opfs.doc"
    .Visible = True
    .PrintOut FileName:=""
    .Quit
    End With
    Set oapp = Nothing
Ciao, Carlo 

 ha scritto nel messaggio 
news:ebnbqf$cl2$1...@area.cu.mi.it...

Ciao Carlo,
ma mi dispiace........ il tuo codice/suggerimento con Access '97 e Word 
2003, anche specificando il documento con compatibilità sia 2003 che 2002, 
non funge :-(
e, per di iù, ogni volta che si apre il documento, mi chiede sempre se 
voglio salvare.
Grazie per la cortese attenzione.
Marco.


Mi spiace Marco, a me funziona benissimo con qualsiasi associazione e in 
particolare con A97 e Word2003.
Prova il solo codice secco, secco, e magari usando un file salvato in c:\.
Controlla nelle opzioni di word, alla voce "Salva", se hai tolto la spunta a 
"crea sempre copia di backup" o altre opzioni che possono in qualche modo 
richiedere o forzare il salvataggio. Elimina eventuali file temporanei con 
lo stesso nome e fammi sapere.
Ciao, Carlo 

lo stesso nome e fammi sapere
                      ho controllato tutto e non c'è nulla da 
flaggare/deflaggare in merito.
Resto in attesa di ulteriori smentite.
Marco. 

 Marco.
Prima di trarre conclusioni affrettate controlla tutte le opzioni e nell'help in linea (di qualsiasi versione word) come aggiornare 
un campo...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggio 
news:ebpc5f$18j$1...@area.cu.mi.it...

Purtroppo prima di giungere a queste, seppur personali, conclusioni, ho 
installato "ex-novo" Office XP e Access '97 su due miei portatili.
Ho potuto "studiare", a fondo, le diverse versioni di Word 2002 e Word 2003 
(per questo problema). Tutte le opzioni, da te suggerite, sono state 
"aggiornate" anche avendo consultato l'help in linea ma, dico ancora 
purtroppo, non c'è soluzione oltre all'accoppiata Access '97 e Word 2002 per 
il codice in argomento.
Sono onorato della pazienza che mi offrite e resto, ancora una volta, in 
attesa di ulteriori consigli.
Marco.

 Marco.
Farò delle prove anch'io...
Ciao.
-- 
Sergio MAZZA 

 Marco.
Ho installato (solo)Acc'97 e (solo)Word2002(XP) e con questo codice 
seleziono un campo DATABASE e lo aggiorno visualizzando il risultato:
'---
Dim oApp As Word.Application
Set oApp = CreateObject("Word.Application")
oApp.Documents.Open "C:\Documenti\nomeFile.doc"
oApp.Visible = True
With oApp.Selection
    .Goto What:=wdGoToTable, Which:=wdGoToFirst, Count:=1, Name:=""
    .Find.ClearFormatting
    With .Find
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    .Fields.Update
End With
'---
Ho inserito i riferimenti alla libreria Microsoft Word 10.0...
Ciao.
-- 
Sergio MAZZA 

Allora, caro Sergio,
a differenza del precedente codice, funzionante perfettamente con Word 2002 
e con pochissime istruzioni, il tuo codice funziona "egregiamente" sia con 
Word 2002 che con Word 2003, con i rispettivi riferimenti, ma, entrambe le 
versioni, per chiudere il documento, richiedono il salvataggio del file (ho 
anche visto nelle opzioni di entrambe le versioni ma non visto nulla per 
evitare ciň).
Mi sono permesso di aggiungere alcune righe:
Private Sub Comando1_Click()
DoCmd.RunCommand acCmdSaveRecord
Dim oApp As Word.Application
Set oApp = CreateObject("Word.Application")
oApp.Documents.Open "C:\Documenti\provacodice.doc"
oApp.Visible = False
With oApp.Selection
    .Goto What:=wdGoToTable, Which:=wdGoToFirst, Count:=1, Name:=""
    .Find.ClearFormatting
    With .Find
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    .Fields.Update
    oApp.PrintOut
    End With
End Sub
======================================================
Se ci fosse un modo per saltare la richiesta di salvataggio, sarebbe 
PERFETTO!
Ah......dimenticavo:
il tuo codice, evitando di visualizzare il documento, in background, 
purtroppo, lascia il file di Word come se fosse aperto. Infatti, per un 
successivo comando di stampa, non apre il documento perchč giŕ utilizzato e 
chiede di aprirne una copia. Effettivamente noto che il file rimane come 
temporaneo.
A te la "supervisione" per le dovute aggiunte/correzioni.
Un profondo ringraziamento.
Marco.

 Un profondo ringraziamento.


In questi casi Magda direbbe:
"Non ce la fauccio piùùùùùù" !!! :-))
Scherzi a parte, ti ringrazio per la gentile attenzione ma, per dovere "di 
cronaca" devo segnalarti che:
con Word 2003, nel documento, i riferimenti provenienti dall'origine dati, 
non vengono visualizzati. Infatti restano in formato "struttura" (non so 
come spiegarmi) e anche salvando il documento al contrario, cioè con la 
visualizzazione dei "campi" di riferimento, non succede nulla. Niente da 
dire sulla tabella (inserisci database) che egregiamente aggiorna i campi.
Con Word 2002 funziona TUTTO a meraviglia.
Per me va bene anche così ma, visto il professionale "smanettamento" e anche 
per soddisfazione personale, non penso che tu sia daccordo :-))
============================================
Private Sub Comando26_Click()
    Me.Refresh
Dim oApp As Word.Application
Set oApp = CreateObject("Word.Application")
oApp.Documents.Open "C:\Documenti\lavoro\opfs.doc"
oApp.Visible = False
With oApp.Selection
    .Goto What:=wdGoToTable, Which:=wdGoToFirst, Count:=1, Name:=""
    .Find.ClearFormatting
    With .Find
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    .Fields.Update
End With
oApp.PrintOut
oApp.ActiveDocument.Close False
oApp.Quit
Set oApp = Nothing
End Sub
================================================
Sono sicuro che ci "ribeccheremo". :-))
Marco. 

 Marco.
Ho installato anche Word2003 e il funzionamento è lo stesso (inserendo i 
riferimenti alla libreria giusta); se vedi la "struttura" dei campi apri il 
documento e premi ALT-F9 fino a quando vedi la tabella o il risultato dei 
campi. Poi salvi il documento...
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Caro Sergio,
purtroppo non ci siamo.
Se il documento viene aperto in visualizzazione, funziona perfettamente - 
stampi, salvi ed esci. Ma qui il problema č che tutto debba avvenire in 
"background", apri il documento, aggiorna tutto, chiude il documento ed esce 
da Word. Cosě facendo e seguendo "alla lettera" i tuoi consigli, il 
documento viene stampato: tabella nominativi aggiornata; riferimenti campi 
stampa unione NISBA! viene stampato solo <<data>> <<luogo>> <<orario>> 
ecc.ecc.
PROVARE PER CREDERE.
Forse non hai provato a mandare in stampa, in background, il risultato.
Attendo fiducioso.
Marco. 

 Marco.
L'istruzione che ti permette di eseguire la stampa unione è:
'---
'--> non visualizza nessun messaggio di alert
oApp.DisplayAlerts = wdAlertsNone
With oApp.ActiveDocument.MailMerge
    .Destination = wdSendToNewDocument
    .Execute
End With
oApp.DisplayAlerts = wdAlertsAll '<-- lo ripristino
'---
Prima che mi chiedi come inviare direttamente su stampante il nuovo 
documento, ti dico subito che devi modificare la proprietà Destination (VBA 
di word) indicando la costante giusta...
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Purtroppo, malgrado la tua squisita attenzione, devo rinunciare ad usare 
Word 2003 con questo problema. Infatti mi viene molto più comodo installare 
solo Word 2002 ed usare queste pochissime righe di codice:
Private Sub Comando26_Click()
    Dim oapp As Object
    Me.Refresh
    Set oapp = CreateObject("Word.Application")
    With oapp
    .Documents.Open "c:\documenti\LAVORO\opfs.doc"
    .Visible = False
    .PrintOut
    oapp.ActiveDocument.Close False
    .Quit
    End With
    Set oapp = Nothing
End Sub
e non perdermi nei meandri degli oggetti di VBA per Word anche perchè, 
sinceramente, non ho capito
L'istruzione che ti permette di eseguire la stampa unione è:
'---
'--> non visualizza nessun messaggio di alert
oApp.DisplayAlerts = wdAlertsNone
With oApp.ActiveDocument.MailMerge
    .Destination = wdSendToNewDocument
    .Execute
End With
oApp.DisplayAlerts = wdAlertsAll '<-- lo ripristino
'---
Prima che mi chiedi come inviare direttamente su stampante il nuovo
documento, ti dico subito che devi modificare la proprietà Destination (VBA
di word) indicando la costante giusta...
----------------------------------------------------------------------------------
Resta sempre, comunque, da capire tutta questa differenza tra le due 
versioni di Word che, come si è visto, è abbastanza notevole e con tutte 
queste righe di codice, non ne ha cavato il c.d. ragno dal buco.
Grazie ancora per la cortese attenzione. Alla prossima.
Marco. 

 ha scritto nel messaggio 
news:44e5a245$0$30246$4faf...@reader1.news.tin.it...

Ti ripeto che il codice che ti ho inviato è lo stesso per qualsiasi versione 
di word; cambia, da access, la libreria di riferimento per la versione di 
word che vuoi utilizzare.
Tanto per la cronaca, il tuo codice (quello sopra) non fa la stampa unione; 
quindi che risolvi?
Peccato sei ad un passo dalla fine...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggio 
news:ec49ag$aqc$1...@area.cu.mi.it...


come non fa la stampa unione????????? FUNZIONA ALLA GRANDE! Non è possibile!
Onde evitare qualche possibile "intereferenza d'onda", voglio 
dettagliatamente specificare ciò che ho:
un documento che contiene dati proveniente da una tabella di Access '97 (da 
Word > apri origine dati e scelgo la tabella del file di database dove 
contiene data, ora, luogo ecc.ecc.) e poi, sotto, una tabella (da Word > 
Inserisci database e scelgo un'altra tabella dove sono contenuti i 
nominativi). Da una maschera inserisco i dati relativi alla data, ora, luogo 
ecc. che mi crea, con una query, una tabella ad esempio, DATI_STAMPA_UNIONE; 
poi in una sottomaschera, con una casella combinata, scelgo i nominativi e, 
dopo l'aggiornamento del controllo, mi crea/aggiorna/accoda, tramite 
un'altra query, un'altra tabella, ad esempio, TABELLA_NOMINATIVI.
Il risultato sarà che in data X, nel luogo Y alle ore Z, sono presenti, in 
una tabella stile Excel, TIZIO, CAIO E SEMPRONIO.
Tanto per la cronaca, :-)) , tutto questo, con Word 2002, mi funge alla 
perfezione ma, guarda caso, il codice (di poche righe) non funge in Word 
2003.
Non so che dirti, misteri di..............Bill Gates!!!!!!! :-))
Un salutone.
Marco. 

 Marco.
La stampa unione, da word, la fai con:
- (97) Strumenti - Stampa unione;
- (2002) Strumenti - Lettere e indirizzi - creazione guidata stampa unione;
tu hai inserito dei campi che leggono dati da una query/tabella; ogni volta che stampi vengono aggiornati da word.
Probabilmente nelle versioni successive alla 97 non funziona perché è cambiato il modo di accedere ai dati (ODBC invece di DDE)...
Ciao.
-- 
Sergio MAZZA 

 (ODBC invece di DDE)...
Forse è proprio questo il problema e, sicuramente, detto da te, non può 
essere altrimenti.
Grazie ancora.
Marco.