Ricerca…


Early Binding vs Late Binding

Binding è il processo di assegnazione di un oggetto a un identificatore o nome di variabile. L'associazione anticipata (nota anche come associazione statica) si verifica quando un oggetto dichiarato in Excel è di un tipo di oggetto specifico, ad esempio un foglio di lavoro o una cartella di lavoro. L'associazione tardiva si verifica quando vengono create associazioni di oggetti generali, ad esempio i tipi di dichiarazione Object e Variant.

Legame anticipato delle referenze alcuni vantaggi rispetto al legame tardivo.

  • L'associazione anticipata è operativamente più veloce dell'aggiornamento tardivo durante l'esecuzione. La creazione dell'oggetto con l'associazione tardiva in fase di esecuzione richiede tempo per l'associazione anticipata quando il progetto VBA viene inizialmente caricato.
  • L'associazione anticipata offre funzionalità aggiuntive attraverso l'identificazione delle coppie chiave / oggetto in base alla loro posizione ordinale.
  • A seconda della struttura del codice, l'associazione anticipata può offrire un ulteriore livello di controllo del tipo e riduzione degli errori.
  • La correzione della maiuscola del VBE durante la digitazione delle proprietà e dei metodi di un oggetto associato è attiva con l'associazione anticipata ma non è disponibile con l'associazione tardiva.

Nota: è necessario aggiungere il riferimento appropriato al progetto VBA tramite il comando Strumenti → Riferimenti di VBE per implementare l'associazione anticipata.
Questo riferimento bibliografico viene quindi portato con il progetto; non deve essere rinviato quando il progetto VBA viene distribuito ed eseguito su un altro computer.

'Looping through a dictionary that was created with late binding¹
Sub iterateDictionaryLate()
    Dim k As Variant, dict As Object
    
    Set dict = CreateObject("Scripting.Dictionary")
    dict.comparemode = vbTextCompare          'non-case sensitive compare model
    
    'populate the dictionary
    dict.Add Key:="Red", Item:="Balloon"
    dict.Add Key:="Green", Item:="Balloon"
    dict.Add Key:="Blue", Item:="Balloon"
    
    'iterate through the keys
    For Each k In dict.Keys
        Debug.Print k & " - " & dict.Item(k)
    Next k
    
    dict.Remove "blue"      'remove individual key/item pair by key
    dict.RemoveAll          'remove all remaining key/item pairs

End Sub

'Looping through a dictionary that was created with early binding¹
Sub iterateDictionaryEarly()
    Dim d As Long, k As Variant
    Dim dict As New Scripting.Dictionary
    
    dict.CompareMode = vbTextCompare          'non-case sensitive compare model
    
    'populate the dictionary
    dict.Add Key:="Red", Item:="Balloon"
    dict.Add Key:="Green", Item:="Balloon"
    dict.Add Key:="Blue", Item:="Balloon"
    dict.Add Key:="White", Item:="Balloon"
    
    'iterate through the keys
    For Each k In dict.Keys
        Debug.Print k & " - " & dict.Item(k)
    Next k

    'iterate through the keys by the count
    For d = 0 To dict.Count - 1
        Debug.Print dict.Keys(d) & " - " & dict.Items(d)
    Next d
    
    'iterate through the keys by the boundaries of the keys collection
    For d = LBound(dict.Keys) To UBound(dict.Keys)
        Debug.Print dict.Keys(d) & " - " & dict.Items(d)
    Next d
    
    dict.Remove "blue"                         'remove individual key/item pair by key
    dict.Remove dict.Keys(0)                   'remove first key/item by index position
    dict.Remove dict.Keys(UBound(dict.Keys))   'remove last key/item by index position
    dict.RemoveAll                             'remove all remaining key/item pairs

End Sub

Tuttavia, se si utilizza l'associazione anticipata e il documento viene eseguito su un sistema privo di una delle librerie a cui si fa riferimento, si verificheranno dei problemi. Non solo le routine che utilizzano la libreria mancante non funzioneranno correttamente, ma il comportamento di tutto il codice all'interno del documento diventerà irregolare. È probabile che nessuno del codice del documento funzioni su quel computer.

È qui che l'associazione tardiva è vantaggiosa. Quando si utilizza l'associazione tardiva non è necessario aggiungere il riferimento nel menu Strumenti> Riferimenti. Su macchine che dispongono della libreria appropriata, il codice funzionerà ancora. Su macchine senza quella libreria, i comandi che fanno riferimento alla libreria non funzioneranno, ma tutto il resto del codice continuerà a funzionare.

Se non si ha familiarità con la libreria a cui si fa riferimento, potrebbe essere utile utilizzare l'associazione anticipata durante la scrittura del codice, quindi passare all'associazione tardiva prima della distribuzione. In questo modo è possibile sfruttare l'IntelliSense e il Visualizzatore oggetti di VBE durante lo sviluppo.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow