ComboBox (ActiveX) collegata ad un Range su Foglio di un'altra Cartella.

 

A volte si ha la necessità di richiamare un elenco di dati che risiedono su un foglio diverso da quello sul quale stiamo lavorando, e vogliamo usare una ComboBox (da "Casella degli Strumenti" o "Strumenti di controllo") per avere un riepilogo di cui desideriamo operare una scelta (Menù lista). La proprietà di una ComboBox,  posizionata sul foglio di lavoro, interessata a reperire il range di celle (sempre in verticale) da mostrarci nel menù a tendina della stessa C.box, è la proprietà ListFillRange(cambia se usiamo ua C.box su una UserForm, in questo caso è RowSource). La sintassi da usare nella Finestra delle Proprietà della ComboBox, (in "Modalità Progettazione", visibile nell'Editor di Visual Basic), per ListFillRange, è la seguente (esempio):

ListFillRange A1:A100

Ovviamente il range è riferito al foglio di lavoro nel quale è stata inserita la ComboBox, ed è sufficiente indicare solo i Riferimenti alle celle. Quando invece si usa la Combobox inserita su un Foglio, ma vogliamo "caricare" un range di celle che sono però su un altro foglio della stessa cartella di lavoro, bisogna anteporre al range, l'indicazione di quale foglio conterrà detto range, seguito da un punto esclamativo ( ! ). Esempio:

ListFillRange Foglio2!A1:A100

E' possibile però cercare e caricare un elenco di dati che risiedono su un'altro Foglio di un'altra Cartella di lavoro. Condizione necessaria sarà che ANCHE l'altra Cartella di lavoro sia aperta. Attenzione alla sequenza con la quale apriremo le due cartelle: dovremo per PRIMO aprire la cartella  che contiene i dati richiamati dalla ComboBox presente sull'altra cartella, e POI aprire quest'ultima. Ma vediamo la sintassi da usare in questo caso per istruire il ListFillRange della combobox:

ListFillRange '[Pippo.xls]Foglio1'!B10:B50

Come si nota, il riferimento viene scritto riportando, tra Parentesi Quadre, il nome del file che porta i dati, poi l'indicazione del Foglio dove risiede il range dei dati, il punto esclamativo, indi i riferimenti al range di celle. Inoltre la stringa NomeFile/Nome foglio, va inserita tra apici semplici ( ' ).

Nell'eventualità che si apra invece per primo il foglio dove risiede la combobox,  apparirà all'apertura, una finestra che ci chiede se vogliamo aggiornare i dati : a questo punto,  sarà indifferente premere "aggiorna" o "non aggiornare" , visto che Pippo.xls è ancora chiuso e i dati chiamati dalla combobox non sono disponibili. E però possibile aprire anche Pippo.xls, selezionare il foglio che contiene la combobox, che non si aggiornerà perchè già aperto, ma predisporre un CommandButton ad quale affidare la seguente routine :

Private Sub CommandButton1_Click()
ComboBox1.ListFillRange = " ' [Trova.xls]Foglio1'!A1:A5"
End Sub

Basterà un click sul CommandButton e verrà ripristinato il collegamento, a fogli aperti, e la combobox riporterà ora l'elenco voluto.
Anche per le Caselle Combinate (simili a ComboBox, ma prese dalla finestrina "Moduli"), dove si usa, anzichè il ListFillRange di cui sono sprovviste, l' "Intervallo di input" (da: Formato Controllo) come indicazione dell'area dati da "caricare", andrà scritto il percorso che identifica l'area di provenienza dati in questa maniera:

'[Trova.xls]Foglio1'!A1:A5

Per le ComboBox ActiveX poste su UserForm, ricordo che la proprietà che identifica l'origine dati non è la ListFillRange ma RowSource. Il discorso non cambia, e potremo usare la stessa sintassi:

ComboBox1.RowSource = " ' [Trova.xls]Foglio1'!A1:A5"