You are here:Home-Domande su Excel VBA e MACRO-Caricamento dll in base alla versione
Caricamento dll in base alla versione2017-12-29T11:11:45+01:00

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

Taggato: 

Visualizzazione 5 filoni di risposte
  • Autore
    Post
    • Alex-55Alex-55
      Partecipante
        Post totali: 28

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

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

            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:

             

             

            Ciao By Sal (8-)
            se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie

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

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

                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

                Ciao By Sal (8-)
                se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie

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

                  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:

              Visualizzazione 5 filoni di risposte
              • Devi essere connesso per rispondere a questo topic.