Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

riferimenti mancanti, librerie non trovate, Access 2013

428 views
Skip to first unread message

trabatare

unread,
Feb 20, 2014, 4:13:41 AM2/20/14
to
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

#############

BFS

unread,
Feb 20, 2014, 4:43:02 AM2/20/14
to
Il 20/02/2014 10:13, trabatare ha scritto:
> Saluti
cut
>
> 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

trabatare

unread,
Feb 20, 2014, 5:23:13 AM2/20/14
to
Il giorno giovedì 20 febbraio 2014 10:43:02 UTC+1, BFS ha scritto:
> Il 20/02/2014 10:13, trabatare ha scritto:
>

> cut
>
>
> usa il latebinding
>
>
CUT
>
>
> in pratica


>
> Dim objExcel as object
> Set objExcel = CreateObject("Excel.Application")
>
>
> invece di
>
>
> Dim objExcel as 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...


BFS

unread,
Feb 20, 2014, 5:29:41 AM2/20/14
to
Il 20/02/2014 11:23, trabatare ha scritto:
> 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)


quale riga ti da errore?

ciao
BFS


trabatare

unread,
Feb 20, 2014, 5:45:51 AM2/20/14
to
Il giorno giovedì 20 febbraio 2014 11:29:41 UTC+1, BFS ha scritto:
> Il 20/02/2014 11:23, trabatare ha scritto:

> quale riga ti da errore?
>
>

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

BFS

unread,
Feb 20, 2014, 7:48:42 AM2/20/14
to
ma se usi il latebinding toglilo il riferimento a office...non serve più.
il latebinding serve proprio a quello


ciao
BFS


trabatare

unread,
Feb 20, 2014, 8:28:44 AM2/20/14
to
Il giorno giovedì 20 febbraio 2014 13:48:42 UTC+1, BFS ha scritto:
> Il 20/02/2014 11:45, trabatare ha scritto:

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

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

BFS

unread,
Feb 20, 2014, 9:10:14 AM2/20/14
to
Il 20/02/2014 14:28, trabatare ha scritto:
> Il giorno giovedě 20 febbraio 2014 13:48:42 UTC+1, BFS ha scritto:
>> Il 20/02/2014 11:45, trabatare ha scritto:
>
>>
>>

>
> 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

trabatare

unread,
Feb 21, 2014, 3:23:01 AM2/21/14
to
Il giorno giovedì 20 febbraio 2014 15:10:14 UTC+1, BFS ha scritto:
> ..
>
> 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(.....)
>
cut

così ho pieno controllo di tutto
>
>
>
> ciao
>
>
>
> 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

trabatare

unread,
Feb 21, 2014, 5:35:25 AM2/21/14
to
Il giorno venerdì 21 febbraio 2014 09:23:01 UTC+1, trabatare ha scritto:
> Il giorno giovedì 20 febbraio 2014 15:10:14 UTC+1, BFS ha scritto:
>

>
> > prova a vedere se il file te lo salva in c:\test\
>
> >
>
> > invece che in c:\
>
>

>
> proverò e riferirò.
>
>

>
> 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

Fair87

unread,
Feb 21, 2014, 6:04:22 AM2/21/14
to
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

trabatare

unread,
Feb 21, 2014, 6:34:29 AM2/21/14
to
Il giorno venerdì 21 febbraio 2014 12:04:22 UTC+1, Fair87 ha scritto:
> Il giorno venerdì 21 febbraio 2014 11:35:25 UTC+1, trabatare ha scritto:
>
> > Il giorno venerdì 21 febbraio 2014 09:23:01 UTC+1, trabatare ha scritto:
>
> >
>
> > > Il giorno giovedì 20 febbraio 2014 15:10:14 UTC+1, BFS ha scritto:
>
> >
>
> > >
>
> >
>
> >
>
> >
>
> > >
>
> >
>
> > > > prova a vedere se il file te lo salva in c:\test\
>
> >
>
> > >
>
> >
>
> > > >
>
> >
>
> > >
>
> >
>
> > > > invece che in c:\
>
> >
>
> > >
>
> >
>
> > >
>
> >
>
> >
>
> >
>
> > >
>
> >
>
> > > proverò e riferirò.
>
> >
>
> > >
>
> >
>
> > >
>
> >
>
> >
>
> >
>
> > >
>
> >
>
> > > 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
>
> 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

0 new messages