You are here:--Caricamento dll in base alla versione
Caricamento dll in base alla versione2017-12-29T11:11:45+02:00

Home Forum Domande su Excel VBA e MACRO Caricamento dll in base alla versione

Tag: 

  • Autore
    Articoli
  • Alex-55Alex-55
    Partecipante
      Post totali: 27

      Ciao a tutti

      Sto usando su più PC le versioni di excel 2003, 2010 e 2016 sia a 32 bit che a 64.

      Ho il problema che non mi trova alcune dll perché le cerca in cartelle che non esistono per la versione utilizzata, ad esempio mi cerca le dll in C:\programmi\file comini\microsoft shared\office14 su excel 2003 o in …office11 su excel 2016.

      Ci vuole una routine che valuti la versione di excel con cui viene aperto il file e quindi cambi il percorso di caricamento della dll. Premetto che tali dll sono state selezionate in vba dal menu strumenti > riferimenti.

      Per vedere la versione di excel uso questo codice:

      With Application

      FVersion=Val (mid (.Version, 1, InStr (1, .Version, “.”) -1))

      End with

      If fVersion =11 then …

      If fVersion=14 then …

      Vi chiedo come fare?

      Grazie

    • Alex-55Alex-55
      Partecipante
        Post totali: 27

        Ciao,

        sbirciando in rete ho trovato questo:

        Sub Test()
        ‘esegue un ciclo sui riferimenti presenti nel progetto attivo scrivendo nella finestra
        ‘immediata il Nome del riferimento, e gli argomenti necessari per aggiungere un riferimento
        ‘tramite il metodo AddFromGuid
        Dim oVBP As VBProject
        Dim oRef As Reference
        Set oVBP = Application.VBE.ActiveVBProject
        For Each oRef In oVBP.References
        Debug.Print oRef.Name
        Debug.Print oRef.GUID
        Debug.Print oRef.Major       ‘principale
        Debug.Print oRef.Minor      ‘secondario
        Next
        End Sub

        ———————————————–

        Sub AggiungiRifVBIDE()
        ‘metodo AddFromGuid
        ‘Aggiunge un riferimento all’insieme References tramite l’identificatore univoco globale (GUID) del riferimento.
        ‘sintassi:    oggetto.AddFromGuid (guid, principale, secondario) As Reference
        ‘La sintassi del metodo AddFromGuid è composta dalle seguenti parti:
        ‘Parte                 Descrizione
        ‘oggetto             Obbligatoria. Espressione oggetto che definisce un oggetto dell’elenco “Si applica a”.
        ‘guid                  Obbligatoria. Espressione stringa che rappresenta l’identificatore univoco globale del riferimento.
        ‘principale       Obbligatoria. Valore Long che specifica il numero della versione principale del riferimento.
        ‘secondario     Obbligatoria. Valore Long che specifica il numero della versione secondaria del riferimento.
        ‘Osservazioni
        ‘Il metodo AddFromGuid esegue la ricerca del riferimento che si desidera aggiungere nel registro di configurazione.
        ‘Il GUID può essere una libreria dei tipi, un controllo, un identificatore di classe e così via.

        ‘Questo esempio aggiunge ai riferimenti il file AccessibilityCpl.DLL
        ‘(nome che compare nei riferimenti: AccessibilityCplAdmin 1.0 Type Library)
        On Error Resume Next
        ThisWorkbook.VBProject.References.AddFromGuid “{714DD4F6-7676-4BDE-925A-C2FEC2073F36}”, 1, 0
        End Sub

        Questi esempi sono abbastanza eloquenti ma non so come posso dargli il percorso in base alla versione di Excel.

        Forse il metodo AddFromGiud non è il modo giusto di procedere.

        Qualcuno sa che dovrei fare?

      • BySalvBySalv
        Amministratore del forum
          Post totali: 453

          Ciao Alex55, Buongiorno e Buon Fine Anno, guardando un poco le tue macro la prima “Sub Test()” scorrendo con F8 dovresti vedere a quali riferimenti cerca di fare il file, in modo da sapere quali attivare per conoscere il percorso.

          Anche se sembra che tutte le Dll sono sempre in System32 o al massimo per il 64bit in Wow64 se ricordo bene, quindi ci saranno solo 2 percorsi, ma non credo che le versioni inferiori alla 2013 vadano su Wow64 in quanto cercano sempre la cartella System32

          ma nei file interessati fai uso di qualche applicazione particolare per usare i riferimenti?

          Ciao e Buon Anno Nuovo  :bye:

           

           

        • Alex-55Alex-55
          Partecipante
            Post totali: 27

            Ciao Sal,

            grazie per la risposta.

            I riferimenti li imposto manualmente da VBA > Strumenti > Riferimenti.

            Le Dll che spunto nella finestra Riferimenti si trovano in questo percorso:

            C:\programmi\file comini\microsoft shared\office … seguito da 11 (se 2003) o 12 (se excel 2007) o 14 (se 2010) o 16 (se 2016)

            E’ vero che con la routine “sub Test()” vedo qual’è il Guid che rappresenta l’identificatore univoco globale del riferimento, ma cambia a seconda della versione di excel. E poi questa “sub Test()” non funziona col 2003 perchè non riconosce le dichiarazioni
            Dim oVBP As VBProject
            Dim oRef As Reference

            Buon Anno anche a te

            Sandro

          • BySalvBySalv
            Amministratore del forum
              Post totali: 453

              Ciao Sandro, quello che volevo sapere quali sono i riferimenti che attivavi.

               

              Comunque potresti anche lanciare una macro all’apertura del file per sapere quale versione di Excel si sta usando ed indicare qual’è il percorso per i riferimenti

              Questa macro ti indica la versione più recente oppure quella di default installata sulla macchina:

              Public Sub m_1()

                  Dim xlApp As New Excel.Application

                  Select Case Val(Mid(xlApp.Version, 1,  InStr(1, xlApp.Version, “.”) – 1))
                      Case 15
                          MsgBox “Excel 2013”
                      Case 14
                          MsgBox “Excel 2010”
                      Case 12
                          MsgBox “Excel 2007”
                      Case 11
                          MsgBox “Excel 2003”
                      Case 10
                          MsgBox “Excel 2002(XP)”
                      Case 9
                          MsgBox “Excel 2000”
                  End Select

                  Set xlApp = Nothing

              End Sub

              in questo modo puoi indicare il percorso per i riferimenti

              Ciao By Sal  :bye:   Salvatore

            • Alex-55Alex-55
              Partecipante
                Post totali: 27

                Ciao Sal,

                innanzi tutto Buona Fine e Buon Inizio, che il 2018 ti possa portare, tra tutte le altre belle cose, soprattutto salute e serenità economica (in questo periodo servono più che mai  :-) ).

                Ritornando al post, se leggi bene il primo messaggio è proprio quello che faccio… cerco la versione.

                Il problema è che non so come fare a caricare le Dll di riferimento. L’unico modo che conosco è l’utilizzo di

                AddFromGuid (guid, principale, secondario) As Reference

                ma mi dovrei cercare tutti “guid”, “principale”, “secondario” per ogni versione di Excel e in base alla versione caricare quelli giusti….

                Ma se arriva una nuova versione di Excel?

                E poi chi me lo dice che il Guid non cambi anche da PC a PC? In fondo è una chiave di registro…

                Ci vorrebbe un metodo più semplice tipo:

                Shell (NomeProgramma & ” ” & NomeFile & “”), 0

                ma no so quale sia ed è proprio questo che sto cercando.

                Grazie, ti abbraccio :bye:

              Devi essere loggato per rispondere a questa discussione.

              Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

              Questo sito utilizza i cookie per fornire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o cliccando su "Accetta" permetti il loro utilizzo.

              Chiudi