Newsgroup: it.comp.appl.access
Titolo: Sostiuzione librerie

Ciao
ho un db che contiene i riferimenti alla libreria di excel 2003 e vorrei
che la libreria fosse sostituita quella di excel 200 per gli utenti che
hanno quest'ultima versione di excel. 
Come posso procedere?
Grazie in anticipo
Mauro
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ha scritto nel messaggio
news:c5lng6$kn$1...@news.newsland.it...

Credo che tu possa scegliere tra togliere un riferimento esplicito ad Excel
e dichiararlo come object o cambiare da codice il riferimento
1 caso
dichiarare una cosa tipo
dim exl as object
....
Questo comporta che in fase di sviluppo non vedrai l'elenco dei metodi e
delle proprieta' e non so quali altre controindicazioni ci possano essere.
2 caso
Qualche tempo fa ho implementato un controllo all'avvio che andava a
verificare la versione di Word presente sul pc e cambiava il riferimento se
era diversa da quella referenziata. Non sono riuscito pero' a farlo senza
chiedere di uscire da Access e riaprire il db. Purtroppo pero' non ho qui il
codice ma se la cosa ti interessa posso spedirlo domani.
Ciao Nicola

Nicola Ardito ha scritto:


Ciao Nicola,
credo che la cosa più semplice sia il secondo punto. Se puoi inviarmi
quanto hai già svilupppato faccio un test e ti rimando un feedback.
Grazie infinite


 Mauro
Chiaramente dovrai cercare nel registro quali valori utilizzare per excel
e poi sul sito ci dovrebbe  essere un esempio di funzione GetRegvalue
Public Sub SistemaRiferimenti()
Dim ref As Reference, L, szKey As String, i, Nomerif As String
On Error GoTo err_sistemariferimenti
i = 0
    With Application
    For Each ref In .References
            Nomerif = ref.Name
            i = i + 1
    Next ref
 
 
    End With
Exit Sub
err_sistemariferimenti:
    i = i + 1
    If Err.Number = -
2147319779
 Then
        References.Remove Application.References.Item(i)
        L = GetRegValue(HKEY_CLASSES_ROOT,
"TypeLib\{00020905-0000-0000-C000-000000000046}\8.1\0\win32", szKey, "")
        If Nz(L, "") = "" Then
        L = GetRegValue(HKEY_CLASSES_ROOT,
"TypeLib\{00020905-0000-0000-C000-000000000046}\8.0\409\win32", szKey, "")
        End If
        If Nz(L, "") <> "" Then
            Application.References.AddFromFile L
            MsgBox "Riavviare l'applicazione per rendere effettive le
modifiche", vbCritical
            Application.Quit
        Else
            MsgBox "Impossibile trovare word"
            Application.Quit
        End If
    End If
End Sub
Ciao nicola


 Ciao nicola
Così non va xchè la procedura si pianta quando cerca di rimuovere il ref
incriminato in quanto la proprietà .name /.fullpath è assente in caso di
riferimenti mancanti. La soluzione che ho pensato è di testare la versione
di access in apertura del db e linkare i riferimenti. Ovviamente
all'uscita dal db tolgo i riferimenti altrimenti siamo da capo.
Per la versione di access uso SysCMD() (suggerito da Karl) e per lincare
le librerie utilizzo il addfromGUID
Ciao


 > > > >
[cut]


Non so se sia possibile  aggiungere i riferimenti al volo senza bisogno di
riavviare il db
In ogni modo la mia situazione era
un Pc di sviluppo con  word2000 e acc97. Sul pc dell'utente ci sono word 97
e acc97
Chiaramente non potevo usare la versione di access che e' la stessa nei due
casi
Il codice viene eseguito all'inizio e  non fa altro che scorrere i
riferimenti
L'istruzione
Nomerif = 
ref.name
va in errore anche da me ma essendo gestito provvede a rimuovere il
riferimento
utilizzando l'item
References.Remove Application.References.Item(i)
poi va a vedere quale versione di word e' presente sul pc e la referenzia
Nicola