Newsgroup: it.comp.appl.access
Titolo: riferimenti mancanti, librerie non trovate, Access 2013

Saluti
premetto che ho speso un paio di giornate a smanettare e (in parallelo) a leggere per bene i post che parlassero dell'argomento in oggetto; mi sono fatto una cultura di latebinding ed earlybinding, ma non riesco a venirne fuori.
Sicuramente colpa mia vista l'età e il fatto che non è il mio mestiere...
 
In particolare ho letto per bene il post: 
https://groups.google.com/forum/#!searchin/it.comp.appl.access/latebinding/it.comp.appl.access/wOM0mjgzElQ/M4WTaLEgif8J
 
 
Vi chiedo quindi, se possibile, di illuminarmi....
 
Scusate inoltre il linguaggio non appropriato
 
Ho sviluppato (da molti anni ormai) un programmino in access 2003: risiede in un server ed è accessibile a una quindicina di utenti.
Il programmino prevede (anche) l'esportazione dei risultati presenti in un form, su un file di excel.
 
La versione di sviluppo come ho detto è Access 2003, ma gli utenti vi accedono dalle loro postazioni che sono dotate di Office 12.0 e Office 14.0
 
Nessun problema registrato finora (dal punto di vista dei riferimenti alle librerie).
 
e' ovvio che se faccio delle modifiche dai pc che hanno montato (per esempio) office 14.0, quando vado ad aprire il file dalla postazione con access 2003 o con office 12.0, il programma riporta l'errore di "riferimento mancante": e chiaramente nel menu "riferimneti" di vba, c'è in bella evidenza MANCA Excel 14.0...
 
Ma questo non è un problema (per me): basta sviluppare solo da Access 2003...
 
Il problema è sorto quando in una postazione è stato installato office 2013, cioè office 15.0.
Se quell'utente apre il programma (non in senso di svuiluppo, solo come utente), gli altri utenti (che ripeto hanno office 11.0, 12.0, 14.0) quando aprono il file si vedono comparire l'errore di riferimento (e, nel menu ruferuimenti di vba, c'è la scritta MANCA Excel 15.0).
 
Ecco allora le domande:
1) perchè con le versioni 12.0, 14.0, il problema non si poneva e si pone ora per la 15.0?
2) non può essere un problema di latebinding o earlybinding, visto che, per ben due versioni successive (la 12.0 e la 14.0) senza cambiare alcunchè tutto ha funzionato perfettamente...
 
Vi chiedo quindi, se possibile, di aiutare chi ora brancola nel buio (e sarei io!)
 
Posto sotto il codice che uso per "esportare" i dati del form in excel.
 
Grazie ancora
 
Guido
 
###########
 
Public Function AExcel(NomeMaschera, NomeFiltro, ValoreFiltro, TipoOperazione)
 
    Dim stDocName As String
    Dim str As String
    'Dim name As String
    Dim excApp As Excel.Application
    Dim excDoc As Object
    Dim Risposta
    Dim Orario
    'Dim TipoOperazione As Integer
 
    'TipoOperazione = Forms!MascheraGestioneAdempimenti.Cornice95
    Orario = Time()
 
 
    stDocName = NomeMaschera   
 
   .......
    str = "C:\FILTRO_" & NomeFiltro & "_" & ValoreFiltro & "_" & Orario & ".xls"
 
 
    DoCmd.OutputTo acOutputForm, stDocName, acFormatXLS, str
 
    Set excApp = New Excel.Application
    Set excDoc = excApp.Workbooks.Open(str)
 
 
With excDoc.Worksheets(1)
.....
 
.....
 
 
End With
 
 
     excDoc.Close savechanges:=True
 
     excApp.Workbooks.Close 
     excApp.Application.Quit
     Set excDoc = Nothing
     Set excApp = Nothing
 
    MsgBox ("FATTO; I DATI SONO SUL FILE " & str)
 
End Function
 
#############


 
usa il latebinding
 
http://msofficefun.wordpress.com/2011/02/26/early-binding-vs-late-binding-in-office-vba/
 
 
in pratica
 
 
 
Dim objExcel as object
 
Set objExcel = CreateObject("Excel.Application")
 
invece di
 
Dim objExcel as Excel.Application
 
Set objExcel = New Excel.Application
 

 Set objExcel = New Excel.Application
 
intanto grazie per la risposta, ma temo di non evere risolto il problema:
 
ho fatto un miniprogrammino (con una unica tabella ed un unico form) per testare il solo latebinding (liberandoci da eventuali altri errori).
il form contiene quindi un pulsante che serve per esportare i dati del form in excel.
 
il codice è il seguente:
 
Private Sub Comando1_Click()
 
 
    Dim stDocName As String
    Dim str As String
    Dim excApp As Object
    Dim excDoc As Object
    Dim Risposta
    Dim Orario
 
     stDocName = "Tabella1"
 
 
    str = "C:\Ciao.xls"
 
 
    DoCmd.OutputTo acOutputForm, stDocName, acFormatXLS, str
 
    Set excApp = CreateObject("Excel.Application")
    Set excDoc = excApp.Workbooks.Open(str)
 
 
     excDoc.Close savechanges:=True
 
     excApp.Workbooks.Close 
     excApp.Application.Quit
     Set excDoc = Nothing
     Set excApp = Nothing
 
    MsgBox ("FATTO; I DATI SONO SUL FILE " & str)
 
End Sub
 
tale programmino l'ho fatto con access 2003 (e funziona correttamente: esporta i dati del form in un file excel).
 
MA, se apro il programmino dalla postazione con access 2013 (office 15.0), appare l'errore 2302.
 
SOPRATTUTTO (?) il problema è che se vado ad aprire nuovamente il programmino con access 2013, ritorna il problema di riferimenti a librerie mancanti (MANCA Excel 15.0)
 
Allora:
 
1) al di là (o forse no?) dell'errore 2302, in ogni caso con il latebinding (l'ho svolto correttamente?) le librerie sembrano "aggiornarsi" (per tutte le postazioni) a quelle piu recenti (le 15.0) con ovvi problemi di apertura da parte di chi ha le versioni 11.0 o 12.0 o 14.0
 
2) con le altre versioni (12.0 e 14.0) tale problema non sussiste: aprono tranquillamente, eseguono; se apro il rpogrammino con access  2003 i riferimenti alle librerie restano quelli a 11.0, quindi senza problemi.
 
Per me, che non sono per niente esperto, resta un bel problema...
 
 

      MsgBox ("FATTO; I DATI SONO SUL FILE " & str)
 
 
quale riga  ti da errore?
 
ciao
BFS
 
 

 
 
la riga del DoCmd OutputTo...
 
Ma questo (se non è legato al discorso che faccio dopo) mi preoccupa meno:
quello che è preoccupante è che se apro il programma (in altra postazione) con Access 2003, c'è il problema dei riferimenti (MANCA: Excel 15.0).
 
il problema è solo dalla postazione con office2013.
Se apro il programma da postazione con office 12.0 o 14.0 intanto non c'è il problema 2302 ma soprattutto, se riapro con Access 2003, non c'è il problema delle librerie mancanti...
 
Ti ringrazio
 
Guido
 


ma se usi il latebinding toglilo il riferimento a office...non serve più.
il latebinding serve proprio a quello
 
 
ciao
BFS
 
 


 
come vedi l'ignoranza (mia) non ha confini!
effettivamente, senza più quei riferimenti, posso aprire il programmino dalla postazione con la versione 15.0 e riaprirlo anche dalla postazione con Access 2003 senza che ci sia il messaggio "MANCA: etc etc...".
 
Tuttavia, resta (nella versione 15.0) il problema 2302, cioè relativo (forse) al formato di output.
 
Non è che, visto che il mio codice è
 
DoCmd.OutputTo acOutputForm, stDocName, acFormatXLS, str 
 
allora il problema risideda nell'acFormatXLS?
in effetti in quella postazione l'office (e quindi anche Excel) installato è 15.0. Forse non posso usare quell'acFormat?
 
oppure il problema risiede nella destinazione (e quindi nome) del file di excel, che io identifico in str
dove str ="C:\Ciao.xls" 
nel senso che avrei dovuto chiamarlo .xlsx?
O forse non avevo "accesso" a C:\ ?
 
Insomma, il problema dei riferimenti (finalmente capito grazie a te e che mi apre molte possibilità di "correzione") è superato da quello della effettiva trasposizione in Excel dei dati di una maschera (solo nella postazione con office 15.0, per le altre: mai nessun problema).
 
Ho letto dell'uso del TransferSpreadsheet (al posto della routine che uso), ma ho letto pure che dovrei comunque creare la query da "passare"; in realtà i risultati del form (che vorrei passare ad Excel) sono già frutto di una (o piu query) e sono ulteriormente "filtrabili" dal form stesso: riscrivere i vari codici, per quanto forse più corretto (e magari farò in futuro), mi risulta più lungo che non capire come mai sia uscito l'errore 2302.
 
Potresti illuminarmi ulteriormente?
 
Grazie
Guido
 


 
 
riscrivo perchč non vedo la mia risposta
..
prova a vedere se il file te lo salva in c:\test\
invece che in c:\
 
io cmq di solito per esportare..prima apro il file xls
poi via vba ci incollo dentro il mio recordset (query)
 
Call excApp.Range("A1").CopyFromRecordset(.....)
 
al posto dei puntini metti la tua tabella/query/stringa sql
cosě ho pieno controllo di tutto
 
ciao
 
BFS

 BFS
 
grazie ancora:
 
1) per quanto riguarda il salvataggio:
proverò a salvare in una cartella che non sia C:\ ma C:\qualcosa. (è necessario che la crei preventivamente, tale cartella? in effetti l'unica cosa sicura che hanno comune tutte le postazioni è c:\. Potrei pensare di creare una cartella "Esportazioni" sul server e far esportare lì i file prodotti.
proverò e riferirò.
 
 
2)per quanto riguarda il modo di esportazione:
mi ero trovato così bene con OutputTo (e con AcOutputForm, che prendeva e metteva direttamente il "visibile" del form in excel) che non ho mai pensato ad una situazione diversa.
Passare il nome query diventa un po' fastidioso, per me:
il form su cui vi sono i risultati è già il frutto di una Query, chiamiamola Query1.
tuttavia gli utenti possono filtrare ulteriormente i dati del form (usando Screen.ActiveForm.Filter).
dovrei quindi "passare" non solo Query1, ma Query1+filtro.
e poi, come dici tu, incollare il risultato sul foglio excel...
 
Grazie ancora per la disponibilità...e per gli eventuali altri suggerimenti!
 
Guido

 Guido
 
ho fatto diverse prove, utilizzando un percorso diverso, per esempio C:\ESPORTAZIONI, ma ho sempre il problema 2302
ho allora pensato di usare il server, come percorso; stesso risultato, errore 2302...
 
continuo a pensare che sia un problema di versioni di office...
 
In ogni caso il problema principale (riferimenti a librerie mancanti) lo ritengo assolutamente risolto.
 
Grazie
 
Guido
 


Per l'errore
 
http://support.microsoft.com/kb/226526/it
 
 
Prova a sostituire C (che NON dovresti mai usare per sicurezza) con 
 
application.CurrentProject.Path
 
E' questo ciò che i vari DB hanno in comune....il loro percorso relativo. Salvi nella stessa cartella del file mdb, qualunque essa sia. Oppure usi le variabili d'ambiente che Win mette a disposizione
 
http://www.enricomilano.it/sintassi.asp?arg=Elencare-le-variabili-Environment-in-VBA.-Le-variabili-di-ambiente.&cod=1783
 
 

 cut
 
Grazie.
Avevo letto l'articolo: ho infatti provato a non usare C:\ ma una cartella sul server. Il problema permane.
Proverò ad usare il current...path per testare ma non vorrei utilizzarlo "definitivamente": non vorrei appunto che i vari utilizzatori (ancor più limitati di me) mettessero le mani nella cartella che contiene il progetto.
 
Per le variabili d'ambiente: studio! (e riferisco).
 
Grazie anche a te.
 
Guido