Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    431

    [VBA access] Riferimenti e versioni diverse di access

    Ciao,
    ho un piccolo database in access che deve essere aperto da due versioni diverse del programma, la 2010 e la 2013.
    In questo programma uso una procedura per importare un file excel su una tabella, inserisco dall'editor visual basic il riferimento di "microsoft excel 14 object library" (ver 2010).
    E qui sta il mio problema, se apro il db con la versione 2010 tutto ok, se apro il db con la versione 2013 mi sostituisce il riferimento e se la riapro con la 2010 mi da un errore perche', giustamente, non riesce a trovare la libreria corretta.
    C'e' un modo per evitare il problema?
    Da un grande potere derivano grandi responsabilità

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Devi usare il 'Late Binding', che è l'unico modo per svincolarsi dalla versione utilizzata, il che vale a dire che usa quella presente nel computer di esecuzione.

    Facci vedere come istanzi gli oggetti di Excel.

    In ogni caso, vedi questi link per capire il funzionamento del Late Binding.
    In partiolar modo, il secondo spiega l'uso della compilazione condizionale per poter sfruttare l'Early Binding in progettazione, ed il Late Binding in esecuzione.
    L'argomento è complesso, ma molto potente. Vale la pena di approfondirlo documentandosi bene.

    ACCESS VBA - Importare fogli Excel con CICLO FOR al DoCmd.TransferSpreadsheet - Access
    http://forum.masterdrive.it/access-7...adsheet-84238/

    Compilazione condizionale come funziona?
    http://it.comp.appl.access.narkive.com/O5dBZnRC/compilazione-condizionale-come-funziona



    Sul mio sito trovi ulteriori esempi di Early/Late binding (in VB.NET e VB 6.0):
    VS2010 - Early-Late Binding in VB.NET + Excel
    http://nuke.vbcorner.net/Projects/NE...S/Default.aspx


    Early-Late Binding con Excel e Outlook (VB6.0)
    http://nuke.vbcorner.net/Articles/VB...S/Default.aspx

  3. #3
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    431
    Ciao grazie della risposta, leggero' i link postati.
    In pratica metto il riferimento di excel e poi dichiaro le variabili

    '************** variabili excel
    Dim a As Excel.Application
    Dim wb As Excel.Workbook
    Dim ws As Excel.Worksheet
    Dim ColonnaPartenza As String
    Dim RigaPartenza As Integer
    '************** fine excel

    gli oggetti li creo in questo modo

    Set a = New Excel.Application
    'a.Visible = True
    'apre il file
    Set wb = a.Workbooks.Open(FileDaImportare)
    'seleziona il foglio piu a sinistra (parte da 1)
    Set ws = wb.Worksheets(1)

    Non posso usare l'importazione standard di access dato che devo fare dei controlli sui dati che importo

    Se non capisco qualcosa dei tuoi link chiedo qui, grazie ancora
    Ultima modifica di abellos; 30-09-2015 a 15:13
    Da un grande potere derivano grandi responsabilità

  4. #4
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    431
    Ciao Gibra, grazie ai tuoi link ho risolto il mio problema e posto la soluzione cosi' può essere utile ad altri
    codice:
    Private Sub bImportaFile_Click()
        Dim ref As Reference
        
        ' 0 if Late Binding
        ' 1 if Reference to Excel set.
        #Const ExcelRef = 1
        #If ExcelRef = 0 Then ' Late binding
            Dim objA As Object
            Dim objWB As Object
            Dim objWS As Object
            Set objA = CreateObject("Excel.Application")
            ' Remove the Excel reference if it is present   -   <=======
            On Error Resume Next
            Set ref = References!Excel
            If Err.Number = 0 Then
                References.Remove ref
            ElseIf Err.Number <> 9 Then 'Subscript out of range meaning not reference not found
                MsgBox Err.Description
                Exit Sub
            End If
        ' Use your own error handling label here
    '    On Error GoTo tagError '-  <=======
        #Else
            ' usate nell'IDE VB
            ' a reference to MS Excel <version number> Object Library must be specified
            Dim objA As Excel.Application
            Dim objWB As Excel.Workbook
            Dim objWS As Excel.Worksheet
            Set objA = New Excel.Application
        #End If
        
    	'objA.Visible = True
    	'apre il file
    	Set objWB = objA.Workbooks.Open(FileDaImportare)
    	'seleziona il foglio piu a sinistra (parte da 1)
    	Set objWS = objWB.Worksheets(1)
    	
    	MsgBox objWS.Range("a1")
    	
    	
    	objWB.Close SaveChanges:=False
    	objA.Quit
    	Set objA = Nothing
                    
    End Sub
    Bisogna solamente fare attenzione che bisogna cambiare la costante ExcelRef a 1 quando si modifica il progetto e a 0 quando lo si vuol fare usare agli altri.
    Da un grande potere derivano grandi responsabilità

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.