Newsgroup: it.comp.appl.access
Titolo: Application.Reference(?)

Un saluto al NG!!
Devo distribuire su vari pc un db mdb che fa uso della libreria
MSWORD.OLB.
E' possibile via codice far caricare in automatico la libreria in
questione? Se sì, a fronte di quale evento dev'essere inserito tale
codice?
Vi ringrazio...

 Vi ringrazio...
Se il file č MDE non funziona, ma sinceramente non sono convinto
sia la strada giusta.
   Application.References.AddFromFile ("NomeFile")
Il pratica conviene usare la tecnica LateBinding o Associazione Tardiva
proprio per evitare problemi di Riferimenti.
Non sň se questo puň essere applicato nel tuo caso.
La differenza sta nel dichiarare la variabile non come
oggetto Word ma come Object.
Questo č quanto credo tu stia facendo
Dim appW as Word.Application
Questa sfrutta l'associazione tardiva
Dim objW as Object
Spero di essere stato chiaro.
Ciao
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Grazie Alessandro!
La riga
Application.References.AddFrom­File ("NomeFile")
funziona benissimo.
Il problema però ora è un altro. Ho immesso la riga a fronte
dell'evento Su apertura di una maschera. Quando chiudo e poi riapro la
maschera mi compare il seguente messaggio d'errore
Nome già utilizzato per modulo, progetto o libreria degli oggetti
esistente
Logicamente, quando tenta di caricare la libreria MSWORD.OLB, Access si
accorge che è già caricata. Ho provato, allora, a mettere a fronte
dell'evento Su chiusura della maschera la riga
References.Remove (MSWORD.OLB)
ma non funziona.
Problema ulteriore. Se sul pc in cui girerà il db è già caricata la
libreria, come si fa a dire ad Access di non tentare l'ulteriore
caricamento per non incappare nello stesso errore?

 caricamento per non incappare nello stesso errore?
Invece di caricarla alla Garibaldina, inserisci un controllo che
non sia già caricata, oppure gestisci l'errore con una corretta
gestione Errori.


Seeeee...!!! E se avessi saputo fare una cosa del genere...!!!
Forse ho chiesto troppo..

 Forse ho chiesto troppo..
Secondo me ti sei scoraggiato senza nemmeno capire la semplicità
della cosa....!
Function ListeReferences()
   Dim accRef As Access.Reference
   For Each accRef In Application.References
      With accRef
         If (.IsBroken = False) Then
            Debug.Print .Name, .Guid, .FullPath
         Else
            Debug.Print .Guid
         End If
      End With
   Next accRef
End Function
Lancia questa funzione e leggi nella Finestra immediata
cosa ti restituisce relativamente alle REFERENZE, quindi
fai un controllo all'avviamento relativamente a quella
di WORD, se non esiste Caricala.
Ciao


Sembra che abbia risolto in questo modo:
Private Sub Form_Open(Cancel As Integer)
Dim refCurr As Reference
For Each refCurr In Application.References
    If refCurr.Name = "Word" Then
    Application.References.Remove refCurr
    Application.References.AddFromFile ("\\MioPercorso\MSWORD.OLB")
    Exit For
    End If
Next refCurr
Possibile debba prima rimuovere il riferimento (anche in quei pc dove
non esiste)?
Avevo provato con
Private Sub Form_Open(Cancel As Integer)
Dim refCurr As Reference
For Each refCurr In Application.References
    If refCurr.Name <> "Word" Then
    Application.References.AddFromFile ("\\MioPercorso\MSWORD.OLB")
    Exit For
    End If
Next refCurr
ma mi restituisce sempre il seguente errore:
"Nome già utilizzato per modulo, progetto o libreria degli oggetti
esistente"
In pratica, l'errore viene segnalato su quei pc in cui è già presente
il riferimento a "Word". Ma la riga If refCurr.Name <> "Word" non
dovrebbe indicare ad Access di caricare il riferimento solo se i
riferimenti già caricati sono diversi da "Word"? Sbaglio la sintassi?

 
[CUT]
All'inizio io ti dissi che questo metodo di lavoro non è
l'ottimo e ti accennai all'uso del LateBinding, ma pare
tu abbia sottovalutato il suggerimento visto che continui
a voler inserire i Riferimenti....!!!
L'uso dei riferimenti è da ritenere valido solo, e solo se, 
all'interno del tuo applicativo si rende necessario gestire
gli EVENTI della Variabile Oggetto.
Dim WithEvents appWord As Word.Application
Allora si che è d'obbligo.
Nel tuo caso se non usi la dichiarazione degli eventi d'oggetto
è assolutamente da da evitare quanto cerchi di fare.
Il LateBinding o Associazione Tardiva serve proprio per
ovviare ai problemi di Riferimenti.
Saluti.


Allora..
innanzitutto ti ringrazio per la tua infinita pazienza. Non è da tutti
star dietro ad un ignorantone (in materia, s'intende) come me.
Proprio in virtù di tale ignoranza, volevo far presente che se mi si
viene a parlare di LateBinding (o Associazione Tardiva che dir si
voglia) non so precisamente di cosa si stia parlando. Ho (molto)
vagamente capito il concetto, ma all'atto pratico non saprei come
intervenire sul codice. Sappi che quelle poche righe che son riuscito a
scrivere finora sono frutto di (lunghe ed estenuanti) ricerche sul NG.
So che non è il modo migliore per imparare, ma so anche che devo in
qualche modo portare a termine 'sto benedetto db. Detto questo..
(ad ogni modo) Grazie Alessa'!!!