Newsgroup: it.comp.lang.visual-basic
Titolo: Problema con utilizzo word 2007 e 2003

Salve a tutti,
        ho un problema di questo tipo: Ho un gestionale che deve
stampare dei moduli, con dei valori che prendo da una tabella. Io a
casa ho instalato Word2007 e la procedura funziona correttamente, solo
che sul computer sulla quale la devo installare c'è word 2003 e quando
vado a fare la stampa mi da un errore 48 - error in opening DLL.
Potrebbe dipendere dalla differente versione installata (eppure sul pc
la cartella office12 c'è...).
Sulla stampa da word mi sono dovuto un po improvvisare ed ho un po
scopiazzato quà e là ed il codice che utilizzo è il seguente:
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim wrdRng As Word.Range
Dim wrdSel As Word.Selection
Dim wrdBkm As Word.Bookmark
 Set wrdApp = New Word.Application
 wrdApp.Visible = True
 wrdApp.WindowState = wdWindowStateMaximize
 wrdApp.Documents.Open (NomeDoc1)
 Set wrdDoc = wrdApp.Documents(1)
 Set wrdSel = wrdApp.Selection
 Set wrdRng = wrdApp.ActiveDocument.Content
 wrdDoc.Bookmarks("nomef").Select
 wrdSel.InsertAfter ("TestoNome")
 wrdDoc.PrintOut
 DoEvents
 wrdDoc.Close False
 wrdApp.Quit
 Set wrdBkm = Nothing
 Set wrdRng = Nothing
 Set wrdSel = Nothing
 Set wrdDoc = Nothing
 Set wrdApp = Nothing
Ho poi scoperto che questo stile si chiama early binding, mentre
sarebbe più appropriato (almeno così si diceva nel post, non mi è
ancora chiarissimo il perchè) adottare una soluzione di tipo Late
Binding, che dovrebbe essere qualcosa del tipo;
Dim wrdApp As Object
Dim wrdSel as Object
Dim wrdDoc as Object
  wrdApp = CreateObject("word.application")
  wrdApp.Documents.Open NomeDoc1
  wrdApp.Visible = True
  wrdApp.WindowState = wdWindowStateMaximize
  wrdApp.Documents.Open (NomeDoc1)
  Set wrdDoc = wrdApp.Documents(1)  (Forse sarebbe meglio usare
wrdApp.ActiveDocument?!?)
  Set wrdSel = wrdApp.Selection
  wrdDoc.Bookmarks("nomef").Select
  wrdSel.InsertAfter ("TestoNome")
  wrdDoc.PrintOut
  DoEvents
  wrdDoc.Close False
  wrdApp.Quit
 Set wrdSel = Nothing
 Set wrdDoc = Nothing
 Set wrdApp = Nothing
Ma questo può avere a che fare l'error 48?!? Traducendo (o tentando di
tradurre...) mi sono reso conto che wrdRng e wrdBkm manco le
utilizzavo, il che palesa in maniera evidente il mio brutale copia e
incolla ;-) e quindi quanto poco ne so degli oggetti Word e delle loro
implicazioni, se qualcuno a qualche suggerimento e bene accetto...

 Dim wrdBkm As Word.Bookmark
Questa cosa non può funzionare.
Non può funzionare perchè per essere compilata richiederebbe di 
inserire i riferimenti di Office nel progetto, e a quel punto ad ogni 
cambio di versione non funziona.
L'Ole con Office si fa dimensionando as Object e istanziando 
Application col CreateObject, poi si scende nell'object model da 
Application fino a dove serve.
Per quanto riguarda invece la sintassi da 'attaccare' dietro agli 
Object, in genere sviluppando le macro con un Office vecchio si ha un 
codice accettato anche dagli Office più recenti.
Alberto
-- 
Heinrich Zille: Ognuno crede che l'altro sia come se stesso, 
dimenticando che al mondo esistono anche delle persone oneste.


...quindi avevo capito bene. Che patacca che sono! La seconda versione
potrebbe andare o ho fatto qualche cavolata?
Fino a lunedì non riesco a mettere le mani su quel PC e non vorrei
consegnarli la versione definitiva.

 consegnarli la versione definitiva.
Ovviamente "vorrei" consegnare la versione definitiva.
Certo che in fase di progettazione sarebbe più comodo dichiarare come
word.application che non come object, almeno per avere subito
dosponibili le propietà ed i metodi...

 dosponibili le propietà ed i metodi...
In fase di sviluppo lo puoi fare. Poi quando devi consegnare il lavoro 
togli il riferimento e usi l'associazione tardiva.
-- 
S.