DAO & Office 2016

di il
3 risposte

DAO & Office 2016

Con questa routine inserisco  all'interno di un controllo Combobox in un form di Word VBA un elenco di tutte le tabelle di un database.

Il problema è che quando vado ad usarlo su un documento con word 2016 esce un messaggio che dica “Interfaccia non registrata”.

Come posso fare?

Sub TABELLElencoConDAO()
   Dim Db As Database   'dichiarazioni di variabili
   Dim Td As TableDef
   Dim NomeDB As String
      NomeDB = "E:\Database.mdb"
        Set Db = DBEngine.OpenDatabase(NomeDB)                  
              For Each Td In Db.TableDefs                        
                         If (Td.Attributes And dbSystemObject) = 0 Then
                                 ComboBox1.AddItem Td.Name                
                        End If
              Next Td
        Db.Close                                                                               
   Set Td = Nothing                                                                        
   Set Db = Nothing
End Sub

3 Risposte

  • Re: DAO & Office 2016

    Hai aggiunto il riferimento alla libreria DAO ?

  • Re: DAO & Office 2016

    17/10/2023 - coccobello ha scritto:


    esce un messaggio che dica “Interfaccia non registrata”.

    Nell'oggetto indichi DAO ma né il messaggio d'errore né in altre parti spieghi che c'è DAO di mezzo (anche se dal codice non può che esserci DAO di mezzo). L'errore evidenzia qualche riga particolare? Nei riferimenti alle librerie c'è DAO e/o Microsoft Office Access Database Engine xx.x? Se c'è anche ADO, in quale ordine sono inseriti?

    Esplicita nel codice che quelle classi fanno parte di DAO, quindi

       Dim Db As DAO.Database   'dichiarazioni di variabili
       Dim Td As DAO.TableDef

    in questo modo l'ordine di inserimento dei riferimenti diventa ininfluente (non so neanche se Database ci sia in ADO, boh)

    Pur essendo il metodo OpenDatabase anche di DbEngine, lo userei per l'oggetto Workspace predefinito (non credo ce ne siano altri)

     Set Db = DBEngine(0).OpenDatabase(NomeDB)

    Hai aperto Access via codice? C'è da qualche parte qualcosa del tipo

    Dim appAccess As Access.Application
    Set appAccess = New Access.Application
    oppure
    Dim appAccess As Object 
    Set appAccess = CreateObject("Access.Application")

    Hai creato in qualche modo un oggetto DbEngine?

    (qualcuno sostiene che sia prolisso… bah… sarà per questo che mentre digito post chilometrici arriva Oregon con 1 riga e io faccio la figura di quello che va per gli affari suoi)

  • Re: DAO & Office 2016

    17/10/2023 - Philcattivocarattere ha scritto:


    (qualcuno sostiene che sia prolisso… bah… sarà per questo che mentre digito post chilometrici arriva Oregon con 1 riga e io faccio la figura di quello che va per gli affari suoi)

    Ma non è vero…. chi lo dice ?  ;-)

    Comunque la chiosa qual'è ? 
    Si conoscono i riferimenti, le librerie, gli oggetti e loro utilizzo ?  se è si !  il problema non sussiste, diversamente sarà solo un colpo di fortuna se le cose funzionano ? 

    Lascio l'interrogativo per puro svizio … ;-))

Devi accedere o registrarti per scrivere nel forum
3 risposte