Utilizzo dei controlli MultiPage e TabStrip. (Controlli ActiveX per UserForm) - pagina vista: volte

Requisiti: conoscenza dei cicli For Next e degli "insiemi" di oggetti.

Tra i vari "oggetti" (controlli ActiveX) che troviamo nella "Casella degli strumenti" inseribili in una UserForm, oggi ci occupiamo del controllo "Multipage" (pagine) e del controllo "Tabstrip" (schede). Entrambi i controlli ci consentono di poter gestire con una unica UserForm, il contenuto di più fogli di lavoro, destinando ogni singola "pagina" o "scheda" del controllo ad ogni singolo foglio delle nostre cartelle xls. Un vantaggio in termini di "peso" del file che conterrà una sola userform, ed un modo gradevole e più veloce nel passare da una pagina (o scheda) all'altra e quindi visualizzare o inserire dati nei relativi fogli o aree associati.

il controllo Multipage (pagine)

il controllo Tabstip (schede)

il controllo Multipage posto su una userform

il controllo Tabstrip posto su una userform

I due controlli sono dimensionabili a piacere, e converrà adattare la loro dimensione alla dimensione della userform; la navigazione avverrà poi semplicemente selezionando una delle pagine (o schede) che avremo selezionato.

I controlli di default si presentano con due sole pagine (o schede) ma potremo aggiungere quante pagine (o schede) vorremo: possiamo agire in fase di progettazione, selezionando col destro del mouse l'ultima "page" o "Tab", e dal menù contestuale che appare, scegliere "aggiungi pagina" (o aggiungi scheda), così:

Come si nota è altresì possibile eliminare, rinominare, spostare la pagina (o scheda) selezionata.

Se invece vorremo aggiungere pagine o schede in fase di esecuzione, sfrutteremo l'evento UserForm_Activate dove inseriremo le istruzioni necessarie. Prima però di proseguire è necessario fare alcune considerazioni:

Questi due controlli quasi simili, differiscono per il modo in cui possono gestire il layout delle pagine o schede:

  • il controllo Multipage consente di diversificare per ogni pagina il layout, cioè possiamo inserire altri controlli, come textbox, label, listbox o combobox, pulsanti, ecc. in ogni pagina diversi per tipo e per numero dalle altre pagine, a secondo le correlazioni che ogni pagina avrà con i relativi fogli della cartella.

  • il controllo Tabstrip invece non consente diversificazione, e i controlli che inseriremo su una pagina saranno gli stessi per tutte le pagine. Sarà comunque possibile fare in modo che ad ogni pagina corrisponda un collegamento ad un relativo foglio di lavoro, oppure un'area diversa di uno stesso foglio.

Entrambi i controlli sono dei "contenitori" di "insiemi" : il Multipage è il contenitore dell'insieme Pages contenente uno o più oggetti Page ; il Tabstrip è il contenitore dell'insieme Tabs contenente uno o più oggetti Tab.

Come per tutti gli "insiemi", sarà possibile identificare le pagine o schede attraverso il loro numero indice, indice che inizia dal numero 0 (zero, non da 1), e quindi avremo:

  • La proprietà predefinita di un controllo MultiPage o TabStrip è Value che restituisce l'indice dell'oggetto Page o Tab attivo.

  • L'evento predefinito di un controllo MultiPage o Tabstrip è Change.

Diventa quindi necessario approfittare dell'evento Change per istruire istruzioni condizionali che, verificando il numero indice della pagina o scheda selezionata (quindi attiva) eseguano istruzioni appropriate. Potremo usare il construtto If...Then...End If oppure il Select Case, a nostro piacere per impostare l'esecuzione di appropriate istruzioni.

Qui farò un esempio specifico su un preciso lavoro, e vedremo come impostare le istruzioni necessarie per interreagire tra pagine o schede, gli "oggetti" ivi inseriti, e i dati che avremo su fogli di lavoro o che vorremo aggiungere a tabelle esistenti.

Riprendiamo quindi esemplificando come aggiungere pagine (pages) o schede (Tabs) all'avvio della userform; sfruttiamo il metodo Add degli "insiemi" "pages" o "tabs"; da notare che in questo esempio non è necessario indicare il numero indice delle page o delle tab da aggiungere; tale indice viene assegnato automaticamente e progressivamente in base ai numeri indice già presenti, come pure il nome che verrà visualizzato nella Caption della pagina (o tab) aggiunta. Visto che i due controlli si presentano di default con due pagine (Page1 numero indice 0 e Page2 numero indice 1) o schede (Tab1 index 0 e Tab2 index1), la routine sotto aggiungerà altre 3 pagine e 3 schede: usiamo un ciclo For Next

  • Private Sub UserForm_Activate()
    For x = 1 To 3  
     'impostiamo un ciclo che "giri" tre volte
    MultiPage1.Pages.Add 
    'ad ogni ciclo viene aggiunta una pagina all'insieme Pages del controllo Multipage1
    TabStrip1.Tabs.Add   
     'ad ogni ciclo viene aggiunta una pagina all'insieme Tabs del controllo Tabstrip1
    Next
    End Sub

Le pagine aggiunte sarranno: Page3 numero indice 2, Page4 numero indice 3, Page5 numero indice 4; lo stesso dicasi per le schede aggiunte (tab), e quindi vedremo questo (lo stesso sarà per le Tab):


Sarà altresì possibile modificare il nome Page# in altro a noi confacente e che ricordi il nome del foglio o dell'area collegato, sfruttando la proprietà Caption di ogni Page. Ricordo che ogni Page (o Tab) possiede la proprietà Name e la proprietà Caption che di default è impostata uguale al Name: se il Name sarà Page1 anche la Caption sarà Page1; potremmo modificare via codice anche la proprietà Name, ma per evitare future confusioni, lasciamo inalterato il Name e modificheremo eventualmente solo la Caption.

Useremo ancora l'evento Activate della userform e forniremo la stringa voluta usando il nome della pagina (non il suo numero indice) di cui vogliamo modificare la proprietà Caption; le istruzioni le inseriremo dopo che il ciclo ha aggiunto le pagine necessarie, oppure avremmo potuto usare una matrice dei nomi da assegnare alle pagine, facendo scorrere l'indice di matrice sfruttando il ciclo:

  • Private Sub UserForm_Activate()
    For x = 1 To 3
    MultiPage1.Pages.Add
    Next
    MultiPage1.Page1.Caption = "Clienti"
    MultiPage1.Page2.Caption = "Fatture"
    Mutipage ecc.ecc.
    End Sub

e vedremo questo

Attenzione: le istruzioni sopra modificano la Caption delle Page1 e Page2, NON il loro nome (Name), che resterà tale.

Per assegnare nuovi nomi alle Caption avremmo potuto usare il loro numero indice relativo all'insieme Pages anzichè il nome (Name) della pagina, esempio:

  • MultiPage1.Pages(0).Caption = "Clienti"  (il numero indice 0 corrisponde al primo elemento nell'insieme Pages, cioè alla Page1)

oppure sfruttare il metodo Item applicato all'oggetto Pages (il metodo Item restituisce un membro di un insieme, in base alla posizione o al nome).

  • MultiPage1.Pages.Item(1).Caption = "Fatture"     (Item(1)  posizione 1 è il numero indice della Page2)

  • MultiPage1.Pages.Item("Page2").Caption = "Fatture"     (Item("Page2") nome Page2 è il nome (Name) della Page2)


Bene, ora possiamo affermare che quando vorremo riferirci ad una Page (o Tab, il discorso non cambia) possiamo usare indifferentemente:

  • il nome assegnato alla proprietà Caption della pagina (o scheda)     Caption = "Quel che vuoi"

  • il nome (Name) della pagina (o scheda)                Page1, Page4,  Tab2, Tab1 ecc.

  • il suo numero indice          Pages(3), Tabs(4) oppure Pages.Item(4), Tabs.Item(0) ecc.  


Chiariti questi punti facciamo una considerazione: quando impiegare, e come, un controllo o l'altro?

Controllo TabStrip. (Schede)

Quando inseriamo un controllo in una scheda, ad esempio una textbox nella scheda Tab1, la stessa textbox sarà la stessa, sia come nome sia come posizione, per tutte le altre schede presenti, e dovremo però diversificare la correlazione del dato da visualizzare al variare della scheda (Tab) selezionata; lo stesso dicasi per eventuali commandbutton, listbox, ecc. ecc.

Per questo motivo si dice che il "layout" sarà lo stesso e non si può diversificare e, visto che con il controllo TabStrip non possiamo cambiare il layout delle schede, si suppone che i dati e/o le operazioni da fare con i controlli che inseriremo saranno composti possibilmente dallo stesso numero di campi, per ognuno dei quali inseriremo ad esempio tante textbox quanti saranno i campi.

Non sarebbe male inoltre, per evitare confusioni, che le posizioni delle celle correlate alle textbox iniziassero su tutti i fogli (richiamati dalle rispettive schede), nella stessa riga e stessa colonna di ogni foglio, questo perchè sarà conveniente, ove possibile, usare dei cicli per il reperimento dati foglio/textbox, ed è opportuno che il numero indice del ciclo identifichi le stesse righe/colonne uguali per ogni foglio di lavoro; ma questo non è determinante, come pure il fatto che le tabelle da cui estrarremo i dati siano composte da un numero maggiore di campi di quanti ne vedremo sulla scheda attraverso le textbox, dipenderà infatti dall'uso che faremo delle schede, cioè se per consultazione dati oppure anche inserimento dati.

Se useremo le schede per inserimento dovremo predisporre tante textbox quanti saranno i campi da aggiornare, mentre se sarà solo per consultazione, potremmo decidere di visualizzare solo alcuni dei campi presenti nella tabella sul foglio. i più smaliziati avranno comunque capito che per l'inserimento, potremmo usare lo stesso numero di textbox che servono per la consultazione, e l'impiego di inputbox per il reperimento dei dati necessari ma eccedenti il numero di textbox predisposte.

Un altra possibilità di sfruttare un controllo TabStrip è quello di visualizzare su più schede i dati correlati ad un unica tabella posta su un solo foglio, ma con molti campi. Per visualizzare ad esempio le informazioni di un'applicazione per la gestione dei dipendenti: sarà possibile includere in una scheda le informazioni personali, quali il nome e l'indirizzo, in un'altra scheda l'elenco dei precedenti datori di lavoro e in una terza scheda l'elenco delle referenze, normalmente tutti campi che appartengono ad una unica tabella su di un solo foglio.

Qualunque sia comunque ciò che vorremo visualizzare, dovremo sfruttare l'evento Change del Tabstrip per inserire le istruzioni condizionali che serviranno a collegare i dati da visualizzare, e le istruzioni sono semplici. Passiamo agli esempi:

Esempio con TabStrip.

intanto imposteremo le tabelle sui fogli contenenti i dati in modo che le intestazioni di colonna inizino tutti da una stessa riga ed una stessa colonna, poi rinomineremo i nomi dei fogli con la descrizione di ciò che conterrà il foglio: io esemplifico con 3 fogli, un foglio "Clienti", un foglio "Fornitori", un foglio "Articoli"; per semplificare l'esempio ho impostato 4 campi per ogni tabella, vediamo le 3 tabelle:

tabella sul foglio "Clienti"

tabella sul foglio "Fornitori"

Tabella sul foglio "Articoli"

Per quanto riguarda il TabStrip, aggiungiamo 1 scheda in fase di progettazione (3 schede in totale x 3 fogli), inseriamo 4 TextBox che ci serviranno sia per la visualizzazione dei dati presenti nella tabelle associate (4 campi ogni tabella), sia per l'inserimento di nuovi dati, e 4 Label che ci forniranno le descrizioni del contenuto delle TextBox e che corrispondono alle intestazioni di colonna; poi inseriamo uno ScrollBar verticale che ci servirà  per scorrere i dati nelle tabelle in modo da visualizzarli nelle TextBox; poi inseriamo un CommandButton che avrà lo scopo di aggiungere nuovi dati.

Aggiungeremo un secondo CommandButton che avrà il compito di consentire la modifica di dati già inseriti e in quel momento presenti nelle TextBox. Avremmo potuto inserire altri controlli come una ComboBox o ListBox per la visualizzazione di uno o più campi delle rispettive tabelle, come pure provvedere l'applicazione di una ricerca dati, ma lo scopo dell'articolo è solo quello di fornire le indicazioni di base senza complicare troppo istruzioni e spiegazioni. Comunque sotto vediamo le immagini della UserForm con il TabStrip1 inserito e relativi controlli aggiunti:

in modalità progettazione

in esecuzione

 

A questo punto vediamo le istruzioni facendo una premessa:

  • abbiamo detto che per identificare una scheda possiamo usare la proprietà Value del TabStrip, che restituisce il numero indice della scheda selezionata; poichè avremo bisogno di sapere quale è la scheda attiva in due occasioni (all'apertura della UserForm (evento Activate) e nel momento in cui ci spostiamo su una scheda diversa (evento Change del TabStrip)), e avremo bisogno pure di sapere a quale Foglio di lavoro corrisponde la scheda selezionata, useremo due variabili Pubbliche da inserire nella sezione Generale - Dichiarazioni del modulo UserForm: la variabile Quale per memorizzare il Value e la variabile Foglio per memorizzare, leggendo la Caption della scheda attiva, a quale foglio ci riferiamo.

  • Altra cosa che ci serve sapere è su quale riga ci troviamo e di quale foglio, quando ci sposteremo con lo ScrollBar; informazione necessaria se vorremo modificare dati già inseriti. Useremo anche in questo caso una variabile Pubblica, la variabile Riga.

e le nostre istruzioni inizieranno con:  (queste inserite nella sezione Generale - Dichiarazioni)

  • Public Quale As Integer
    Public Foglio As String
    Public Riga As Long

queste le istruzioni poste nell'evento Activate della UserForm :

  • Private Sub UserForm_Activate()
    TabStrip1.Tabs.Item(0).Caption = "Clienti"     
     'assegniamo i nomi dei fogli ad ognuna delle tre schede, oppure:  = Sheets(1).Name ecc.
    TabStrip1.Tabs.Item(1).Caption = "Fornitori"
    TabStrip1.Tabs.Item(2).Caption = "Articoli"
    Quale = TabStrip1.Value                             
     'ora assegniamo alla variabile Quale il Value (l'indice di scheda) della scheda attiva, che è la Tab0
    Foglio = TabStrip1.Tabs(Quale).Caption         
    ' ne leggiamo la Caption che restituisce il nome del foglio a cui ci si riferisce, e si assegna a "Foglio"
    x = Sheets(Foglio).[A1].End(xlDown).Row    
      'con "x" prendiamo l'ultima riga in cui la colonna A ha una cella occupata (colonna nominativo)
    ScrollBar1.Min = 2                                       
    'impostiamo il valore corrispondente alla riga da cui inizierà lo scorrimento della ScrollBar
    ScrollBar1.Max = x                                      
    'impostiamo con x il valore finale di scorrimento
    ScrollBar1.Value = 2                                    
    'impostiamo la riga con cui lo ScrollBar si presenta all'inizio
    For M = 1 To 4       
     'ora iniziamo un ciclo che assegna alle Label il corrispondente nome di campo presente su "Foglio", cella riga 1, colonna M
    Me.Controls.Item("Label" & M) = Sheets(Foglio).Cells(1, M)
    Me.Controls.Item("Textbox" & M) = Sheets(Foglio).Cells(ScrollBar1.Min, M) '
    e contemporaneamente alle textbox il contenuto dei dati della seconda riga di '"Foglio". il Contatore M si incrementerà di 1 ad ogni ciclo. Per ottenere l'associazione numero riga usiamo il valore assegnato alla proprietà Min dello scrollbar, 'quindi 2, mentre il contatore M indicherà il numero di colonna.
    Next

    End Sub

Vediamo ora le istruzioni inserite nell'evento TabStrip1_Change(), cioè l'evento che si genera quando selezioniamo una scheda diversa da quella attiva; poichè abbiamo bisogno di adattare le Caption delle Label alle nuove intestazioni di campo del foglio corrispondente alla scheda selezionata, come pure dovremo far corrispondere i dati della tabella del relativo foglio, ripetiamo il reperimento del Value e del nome del Foglio della scheda ora attiva, ripetendo un ciclo per la lettura dei dati e assegnazione a Label e TextBox

  • Private Sub TabStrip1_Change()
    Quale = TabStrip1.Value
    Foglio = TabStrip1.Tabs(Quale).Caption
    For M = 1 To 4
    Me.Controls.Item("Label" & M) = Sheets(Foglio).Cells(1, M)
    Me.Controls.Item("Textbox" & M) = Sheets(Foglio).Cells(2, M)
    Next
    End Sub

Ora passiamo alle istruzioni assegnate al CommandButton1, quello che serve per inserire nuovi dati. In questa fase abbiamo bisogno di:

  • pulire le TextBox predisponendole all'inserimento di nuovi dati.

  • reperire l'ultima riga occupata sul foglio corrispondente alla scheda, + 1 per avere il numero della prima riga libera dove inserire i nuovi dati.

  • non abbiamo bisogno di reimpostare il Value e il nome del Foglio perchè li avremo già in memoria, impostati dall'evento Change del TabStrip, o dall'evento Activate della userForm.

Per ottenere la pulizia delle TextBox e contemporaneamente la possibilità di registrare su foglio nuovi dati con un unico CommandButton ("Inserisci Dati"), sfruttiamo la proprietà Caption del CommandButton, modificandola e creando un istruzione condizionale: al primo click sul CmdBtn facciamo pulire le textbox e contemporaneamente impostamo la Caption del cmdbtn con la voce "Registra"; al secondo click SE la Caption sarà uguale a "Registra" facciamo registrare i dati delle textbox nella riga trovata libera, e rinominiamo la Caption in "Inserisci Dati"; è modificando la Caption che otteniamo il diverso comportamento da un solo CmdBtn.

Una cosa molto importante da tenere presente, e che ogni dato scritto in una TextBox è SEMPRE visto dal codice come una stringa di testo. Non avremo problemi a trasferire i dati dalle textbox alle celle del foglio se i dati sono "testo", ma cosa succede se dovremo trasferire dati di tipo data, orario, o valori numerici? per evitare effetti indesiderati dovremo usare le funzioni di conversione del tipo di dati (vedi articolo "Variabili e tipi di dati").

Nella scheda "Articoli" ad esempio, dobbiamo inserire il prezzo dell'articolo, e trattandosi di un valore in euro, avremo bisogno di definirlo ad esempio come Tipo di Dato Double. Purtroppo non è possibile in un ciclo semplice che legga il contenuto di Textbox per il trasferimento a celle dei dati letti, definire anche Tipi di Dati diversi, e dovremo impostare istruzioni separate per il trasferimento dati da ogni textbox alla relativa cella di pertinenza, indicando la funzione opportuna per ogni dato trasferito.

Nell'esempio che ho impostato, per la scheda Articoli, è solo l'ultima TextBox a dover essere precisata nel Tipo di Dato; useremo un ciclo quindi sulle prime tre textbox, mentre diversificheremo l'istruzione per la quarta textBox.

Esiste un altro problemino: se dichiariamo ad esempio un Tipo di Dato numerico, e ci siamo dimenticati di inserire (in questo caso il prezzo) il dato, generiamo l'errore di run-time 13 in quanto "Tipo non corrispondente"; infatti una stringa vuota (textbox senza dati) non è esattamente quello che il codice si aspetta di impostare (un numero di tipo Double). Lo stesso errore si genera se anzichè lasciare la textbox4 vuota, ci scriviamo testo, o altro dato che non sia un numero. Possiamo usare quindi una verifica con If..Then..End If e sfruttando la Funzione VarType (vedi guida in linea) che restituisce un numero che identifica il tipo di variabile usata: se la textbox4 è diversa da 5 (valore restituito da una variabile Double), usciamo dalla routine avvisando di riscrivere il dato (If VarType(Textbox4) <> 5 then...). Ma consiglio di usare un tipo di verifica più elastica sfruttando la Funzione IsNumeric che si limita a valutare se un dato è numerico o no (If IsNumeric(TextBox4) = False Then...).

Ma questa modifica alla quarta TextBox ci interessa solo se saremo sulla scheda "Articoli" (le altre schede trasferiscono tutte dati di tipo testo), ed abbiamo bisogno di diversificare le istruzioni di trasferimento in funzione del foglio al quale ci riferiamo. Useremo un Select Case che leggendo il Value della scheda attiva, diversifichi le istruzioni, queste:

  • Private Sub CommandButton1_Click()   ' il pulsante "Inserisci Nuovo"
    UltimaRiga = Sheets(Foglio).Cells(65536, 1).End(xlUp).Row + 1 
    'prendiamo con "UltimaRiga" il numero della prima riga vuota nella colonna 'A
    If CommandButton1.Caption = "Inserisci Nuovo" Then  
    'se il cmdbtn porta la Caption impostata a "Inserisci Nuovo", eseguiamo queste 'istruzioni:
    For I = 1 To 4
    Me.Controls("TextBox" & I).Text = ""  
    'si puliscono le TextBox
    Next
    TextBox1.SetFocus                            
    'si posiziona il focus nella textbox1
    CommandButton1.Caption = "Registra i dati" 
     'e si rinomina la Caption del cmdbtn
    Else                    
     'altrimenti eseguiamo queste altre istruzioni, quindi dopo che avremo pulito le textbox e rinominato la caption.
    Select Case Quale 
     'impostiamo un Select Case basandoci sul numero indice della scheda attiva (ottenuto con la variabile "Quale")
    Case 0 To 1  
    'se saremo sulle schede tab1( indice0)  o tab2(indice1) eseguiamo un ciclo che trasferirà il testo dalle 4 textbox alle celle del 'foglio "Foglio"
    For F = 1 To 4
    Sheets(Foglio).Cells(UltimaRiga, F) = Me.Controls.Item("Textbox" & F).Text
    Next
    Case 2
    'se invece saremo sulla scheda tab3 (indice 2)
    If IsNumeric(TextBox4) = False Then
     'verifichiamo subito se la textbox4 è un valore numerico, altrimenti si avvisa e si esce dalla routine
    MsgBox "Indicare esattamente il Prezzo in cifre"
    TextBox4.SetFocus
    Exit Sub
    End If
    For F = 1 To 3 
     'iniziamo un ciclo per le prime 3 textbox, (con valori stringa)
    Sheets(Foglio).Cells(UltimaRiga, F) = Me.Controls.Item("Textbox" & F).Text
    Next
    Sheets(Foglio).Cells(UltimaRiga, 4) = CDbl(TextBox4.Value)
    'mentre per la textbox4 usiamo un'istruzione separata e la funzione CDbl
    End Select
    CommandButton1.Caption = "Inserisci Nuovo"
     'e solo a questo punto rinominiamo la caption del cmdbtn
    End If
    End Sub

E' chiaro che se ci fossero più diversificazioni nei "tipi di dati" dovremo usare più istruzioni separate, indicando per ogni textbox il relativo indirizzo di riga e di colonna della cella del foglio dove inviare i dati stessi.

Per quanto riguarda il pulsante "Modifica Dati" il discorso è semplice: lo useremo dopo che avremo agito sul pulsante dello ScrollBar, scorrendo i dati di una qualsiasi delle tabelle presenti, quindi avremo che il valore che ci interessa per determinare su quale riga si trovano i dati che vedremo nelle TextBox, è il valore rappresentato dalla variabile pubblica Riga, valore che ci servirà per "riscrivere" i dati sulle 4 celle di quella riga.

Anche in questo caso dovremo valutare su quale foglio ci troviamo per fare in modo da trasferire il "tipo di dato" opportuno, quindi le istruzioni inserite nell'evento Click del CommandButton2 sono:

  • Private Sub CommandButton2_Click()    'pulsante "Modifica Dati"
    For U = 1 To 4
    Select Case Quale
    Case 0 To 1
    For F = 1 To 4
    Sheets(Foglio).Cells(Riga, U) = Me.Controls.Item("Textbox" & U).Text
    Next
    Case 2
    For F = 1 To 3
    Sheets(Foglio).Cells(Riga, U) = Me.Controls.Item("Textbox" & U).Text
    Next
    Sheets(Foglio).Cells(Riga, U) = CDbl(TextBox4.Value)
    End Select
    Next
    End Sub

Per ultime vediamo le istruzioni associate all'evento Change dello ScrollBar, evento che si genera quando faremo scorrere il pulsante. Non è necessario ridefinire i valori di "Foglio" e di "Quale" in quanto li avremo già in memoria, ci limitiamo a reimpostare la variabile Riga attraverso l'assegnazione del Value che in quel momento avrà lo ScrollBar, ed usare il valore di Riga per sostituire il contenuto delle TextBox  con i dati che saranno sulla tabella corrispondente al foglio, sulle celle della riga "Riga":

  • Private Sub ScrollBar1_Change()
    Riga = ScrollBar1.Value
    For I = 1 To 4
    Me.Controls("TextBox" & I).Text = Sheets(Foglio).Cells(Riga, I).Value
    Next
    End Sub

Se useremo il controllo Multipage basterà sostituire tutte le istruzioni e gli eventi dove compare "TabStrip1" con "Multipage1". C'è da dire che, potendo cambiare il layout in ogni Page, risulterà più opportuno usare istruzioni personalizzate (e meno cicli) per gli "oggetti" inseriti che sicuramente si diversificheranno per tipo e/o quantità, sfruttando più condizioni da verificare al variare della Page su cui ci troveremo.

Le istruzioni sopra esemplificate vogliono essere solo un indicativo che potrà aiutare quanti si vorranno cimentare con questi "Controlli ActiveX".

 

File consultabile e scaricabile :    TabstripePage.zip    19 Kb    

 

 

prelevato sul sito www.ennius.altervista.org