Articolo wiki
  • Questo articolo wiki è bloccato
Applicabile a 4199 visualizzazioni

Excel - Gestire una tabella nascosta tramite una UserForm - VBA

Riepilogo

Livello tecnico: Conoscenza di base di Visual Basic for Applications Si applica a: Excel (97/2000/2002/2003/2007/2010/2013)

Dettagli

Il nostro obiettivo è quello di gestire tramite una UserForm una tabella che si trova in un foglio nascosto.  La visualizzazione del foglio che contiene la tabella è protetta da una password e quindi, l’utente non autorizzato non può vedere il foglio. Inoltre vogliamo che i dati selezionati nella UserForm possano essere inseriti nel foglio attivo. Il foglio che contiene la tabella, per semplificare l’esempio non è protetto.

 

NOTA. L’esempio ed il codice sono forniti *così come sono* e l’autore declina ogni responsabilità per un loro uso scorretto. Utilizzate l’esempio fornito o un file di prova per i vostri test. La correzione delle eccezioni (errori) e il controllo del tipo di dati inserito è solo parziale. Il file vuole essere un semplice esempio che illustra come sia possibile automatizzare Excel ed è fornito solo a scopo dimostrativo.

In questo esempio abbiamo un foglio Registro che contiene già le intestazioni dei quatto campi (colonne) della tabella. I nomi delle intestazioni (utilizzati nella UserForm come Caption delle Lable a fianco delle TextBox) possono ovviamente essere modificati a piacimento:

 

 

Figura 1: Campi della tabella nel foglio Registro

 

In questo esempio, la tabella accetterà questo tipo di dati:

  • Il primo campo (Codice) conterrà un identificativo univoco, nel formato: Cod001, Cod002, ecc.  Il codice sarà inserito *automaticamente*, quindi fuori dal controllo dell’utente e la relativa TextBox risulta disabilitata.
  • Il secondo campo (Importo) accetta solo valori numerici. Se l’utente non inserisce nulla nella TextBox relativa o se in fase di modifica elimina il dato, nella tabella verrà comunque riportato il valore 0
  • l terzo (Data) accetta valori data. Non viene fatto, nello specifico, nessun controllo sulla formattazione e tipo di data inserito.
  • Il quarto campo (Nome) accetta qualsiasi tipo di valore. Fare molta, molta attenzione: quando non si determina in modo esplicito il tipo di dato restituito da una TextBox, Visual Basic lo fa in modo implicito e non sempre si ottiene quanto desiderato. Un esempio per tutti, le date.

Questo, nell’editor del VB di Excel, l’aspetto finale della UserForm in fase di progettazione, Posizionare e/o ridimensionare controlli/UserForm secondo i propri gusti/necessità:

 

Figura 2: UserForm in fase di progettazione

 

Nel Modulo1 si trova il codice per attivare la UserForm e per nascondere/mostrare il foglio Registro. Le tre Sub presenti si possono lanciare tramite i seguenti pulsanti di scelta rapida:

  • CTRL+a – Sub: m()  (visualizza la UserForm)
  • CTRL+n – Sub: mNascondiFoglio() (nasconde il foglio Registro)
  • CTRL+m – Sub: mMostraFoglio (mostra il foglio Registro e viene richiesta la password: 123)

Il codice delle tre Sub è estremamente semplice, un’unica annotazione sull’utilizzo del metodo Application.InputBox al posto di una UserForm per la richiesta della password:

 

Public Sub mMostraFoglio()

    Dim v As Variant

    v = Application.InputBox("Inserire la password", _

        "Visualizzazione Registro")

    If v = "" Then Exit Sub

    If v = False Then Exit Sub

    If v = "123" Then

        With ThisWorkbook.Worksheets("Registro")

            .Visible = xlSheetVisible

            .Select

        End With

    Else

        MsgBox "Password inserita non valida", _

            vbOKOnly + vbCritical, _

            "Visualizzazione registro"

    End If

End Sub

 

E questa è l’InputBox visualizzata:

 

Figura 3: InputBox per la richiesta della password

 

Tutto il codice relativo alle operazioni possibili si trova nel modulo di codice della UserForm ed è ampiamente commentato. Avendo già inserito in precedenza dati nel foglio Registro, al suo avvio la UserForm si presenterà in questo modo:

 

Figura 4: UserForm a runtime con i dati caricati dal foglio Registro

 

I pulsanti (CommandButton) sulla UserForm hanno queste funzionalità:

  • Nuovo – Azzera le TextBox e inserisce nella Prima TextBox il nuovo codice
  • Inserisci – Inserisce (se non ci sono errori) il contenuto delle TextBox nel foglio Registro
  • Modifica – Consente di cambiare i dati selezionati nella ListBox e modificati tramite le TextBox
  • Elimina – Elimina il dato selezionato nella ListBox
  • Azzera TextBox – Azzera le TextBox
  • Copia nel foglio – Copia nel foglio attivo il dato selezionato nella ListBox a partire dalla cella selezionata
  • << - Seleziona la prima riga della ListBox
  • < - Seleziona la riga precedente della ListBox
  • > - Seleziona la riga successiva della ListBox
  • >> - Seleziona l’ultima riga della ListBox

Ogni selezione di una riga della ListBox, modifica il contenuto delle TextBox in base ai dati della riga selezionata.

Nel foglio Registro del file d’esempio, sono già presenti alcune righe di dati. Potete cancellarle e ricominciare da zero. Non cancellate però i dati della prima riga, ovvero le etichette dei campi (che potete comunque rinominare a piacere, ricordandovi poi di fare altrettanto con le Label della UserForm).

 

E’ possibile espandere il numero delle colonne gestibili in questo modo ad un massimo 10(indice da 0 a 9). Il limite è dovuto all’utilizzo del metodo AddItem per popolare la ListBox. Almeno un foglio del file deve essere visibile.

 

Modifiche.

A seguito di questo thread sul Forum di Excel nella Community di Office:

ho aggiunto due nuovi esempi. Nel primo gestionefogliodauserform_1.zip , invece di COD001, COD002, ecc., abbiamo una progressione numerica in colonna A. Questo, come spiegato nel thread, può portare a problemi se si eliminano righe nella tabella. Problema che si può risolvere in vari modi. Il più semplice porta a definire con un Nome una cella e inserire in quella cella la progressione numerica(nell'esempio gestionefogliodauserform_2.zip, la cella B1 del foglio Dati).

 

Riferimenti.

I file d’esempio sono scaricabili dal sito maurogsc.eu a questo link:

Altri articoli Wiki che riguardano il VBA di Excel e le UserForm:

 

NOTA. Excel non dispone nativamente di procedure assolutamente sicure per impedire la visualizzazione e la modifica del codice vb e/o per la protezione dei fogli. E’ una cosa da tenere sempre presente quando si distribuiscono file con contenuti ritenuti delicati. Ricordate anche che è possibile lanciare il file di Excel senza che vengano eseguite le macro.


Risorse.

 


 Avvio Pulito di Windows
(courtesy of Microsoft MVP Franco Leuzzi)


Computer infettato da malware (courtesy of Microsoft MVP Vincenzo Di Russo)


Commenti (3)

avanzamento