Excel DataPicker - Selezione data con calendario

google-plus Scritto da . Postato in Excel

In questo periodo, dopo aver di nuovo cambiato lavoro, mi sono riaffacciato al mondo di Excel.

Questo meraviglioso strumento, ha davvero inimmaginabili potenzialità. Basta saperle sfruttare. Nel caso di dover gestire più e più righe di fatture o documenti in ingresso, spesso inserire date a mano può essere oneroso.

A chi, dopo aver inserito due righe di dati e più volte date a mano, magari ripetendo l'anno e il mese non gli è venuto in mente quanto sarebbe comoda l'apparizione di un sistema di selezione della data a portata di click simile ai datapicker che si incontrano nei siti web di prenotazione hotel, voli e quant'altro?

Bene! E' ciò che anche a me è capitato! Dopo aver creato il mio modello in Excel, è ovvio che da informatico mi sono messo a pensare come renderlo più efficiente. E quello di un datapicker o calendario a comparsa per l'inserimento delle date mi è sembrato un grande passo in avanti e un'enorme risparmio di tempo. Specie se si pensa quante volte si sbaglia battendo i dati a mano direttamente da tastiera.

Una breve ricerca su internet, e mi sono imbattuto in un progetto davvero interessante che consente di integrare il calendario per la selezione delle date anche nelle versioni più recenti, dove il controllo OCX non è più presente. Io dico: Ma come è possibile che abbiano tolto una cosa così basilare da uno strumento così avanzato?

Nessun problema, c'é chi lo ha creato per noi! 

Calendar Control

Visitate questa pagina Calendar Control for All Office version

L'idea del progetto Calendar Control, è quello di creare un Calendario popup scritto in VBA che vada a sostituire quello esistente o che vada a integrarlo laddove è assente. Per questo viene creato o integrato un Modulo di classe nel progetto Excel.

Come integrare questa meravigliosa classe calendario (cCalendar) nel tuo progetto?

Viene consigliato di sostituire il controllo calendario OCX con la classe calendario, soprattutto se si sta usando Office 2010. 

Nel caso in cui utilizziate Office 2010 e non disponete del controllo calendario, nei riferimenti di progetto VBA verrà visualizzato il controllo di Microsoft Calendar mancante (MANCA - in alcune versioni, il controllo calendario ha un nome differente).

Per verificarlo, Andate nella Scheda Sviluppo di Excel, Selezionate VBA o Visual Basic e una volta aperta la finestra di progetto, cliccate su Strumenti > Riferimenti

VBA Riferimenti

Potrebbe interessarti:

Excel - Visualizza Scheda Sviluppo

Dovrete spuntare il controllo mancante - non intaccherà il codice esistente. Ora potete integrare la nuova classe calendario nel vostro progetto Excel come spiegato di seguito:

Una volta accertati che la libreria è assente o disabilitata, scaricate la versione del Calendar Control Class più adatta: Andate in fondo alla pagina ufficiale del progetto scorrendola fino in fondo dove sono elencate tutte le varie versioni. Io ho scelto la versione Samle1.xlsm

Facendo click sul link Samle1.xlsm e avviato il download, scaricherete il file corrispondente.

E' un file di Excel contenente macro. All'apertura Excel vi avvertirà della presenza di esse nel file e le bloccherà, così come disabiliterà le modifiche visto che il file proviene da internet. Alcuni file contententi macro sono dei Malware. Per questo Excel di default ne blocca l'esecuzione.

E' indispensabile abilitarle, in quanto le macro dovranno essere attive se volete sfruttare il Datapicker che stiamo per integrare. Dunque non esitate. Il file non è infetto: Apritelo come un normale file Excel facendo doppio click su di esso. Poi fate click sul pulsante Abilita modifiche. Infine quando richiesto, cliccate sul pulsante Attiva macro.

excel abilita macro

Integrare la classe Control Calendar

Fatto? Ora spostatevi nella Scheda Sviluppo e aprite l'editor VBA. Accertatevi di vedere entrambi i progetti aperti: Il vostro dove integrerete il Controllo Calendario e il file che contiene i moduli VBA, ovvero quello che avete appena scaricato da internet.

excel vba moduli progetto 

Sulla sinistra, dove vedete l'albero dei moduli di progetto, aprite le cartelle Form, Moduli e Moduli di classe del progetto Control Calendar. Ora, trascinate il contenuto delle cartelle citate in precedenza sul vostro progetto. L'effetto, dovrebbe essere quello di vedere replicate le cartelle e il loro contenuto anche nel progetto nel quale volete incorporare il calendario VBA.

Ciò vi eviterà di fare alcuni dei passaggi descritti nella pagina del progetto cCalendar, come ad esempio di creare una nuova Form nel progetto e di incollarvi sopra un Frame vuoto o preparare il codice per l'uso del Calendar Control spiegato ai punti 2.1 a 2.3. I file che copierete da un progetto all'altro, contengono infatti tutto questo. Sono solo da includere con un semplice Drag and Drop (trascinamento) nel vostro file Excel. 

La UserForm1 già contiene i seguenti metodi per l'evento di Inizializzazione della form, con la creazione dell'istanza della classe cCalendar e la gestione dell'evento DoubleClick. Quest'ultimo consentirà di inserire la data selezionata con un semplice doppio click sul tasto sinistro del mouse una volta aperto il datapicker.

Rem Attribute VBA_ModuleType=VBAFormModule
Option VBASupport 1
Option Explicit
'UserForm with Frame1
Private WithEvents Calendar1 As cCalendar

Private Sub Calendar1_DblClick()
ActiveCell.Value = Calendar1.Value
Unload Me
End Sub

Private Sub Frame1_Click()
End Sub

Private Sub UserForm_Initialize()
Set Calendar1 = New cCalendar
With Calendar1
.Add_Calendar_into_Frame Me.Frame1
.UseDefaultBackColors = True
.DayLength = 3
.MonthLength = mlENShort
End With
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Set Calendar1 = Nothing
End Sub

Dopo aver creato istanza della classe cCalendar, viene dichiarato l'evento DoubleClick() la cui funzione come abbiamo accennato sarà di rispondere nel momento si selezionerà la data da inserire nella cella evidenziata.

La procedura UserForm_Initialize() invece inizializza il calendario, usando il Frame1 come contenitore. I parametri, sono quelli di default. Nel sito del costruttore, potrete vedere elencate tutte le opzioni che si possono dare attraverso i vari attributi della classe.

Per ultimo il metodo di chiusura del Form stesso.

Ci sono diversi modi di usare la classe appena integrata nel nostro file, come ad esempio usare un pulsante per aprire il datapicker. Io ho preferito optare per l'uso del doppio click all'interno del foglio di lavoro. Questione di preferenze:

Uso della classe Control Calendar

Una volta copiati i moduli contententi anche il codice riportato sopra, serve solo fare in modo che il vostro file Excel, sfrutti la nuova macro: Per farlo, basterà aggiungere il seguente codice alla cartella di lavoro sul quale si vuole attivo il calendario con un semplice doppio click su qualsiasi cella di un qualunque foglio all'interno del Worksheet.

Aprite il modulo Questa_cartella_di_lavoro e incollate il seguente codice:

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
UserForm1.Show
End Sub

worksheet doubleclick code

o come suggerito sul sito del costruttore:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'----------------------------------
' Open DatePicker
Set DatePickerForm.Target = Target.Cells(1, 1)
DatePickerForm.Show vbModal
Cancel = True
'----------------------------------
End Sub

Ecco fatto! Ora, per testarne il funzionamento, chiudete l'editor VBA o spostatevi semplicemente nella cartella di lavoro. Fate doppio click su una cella qualunque. Il risultato dovrebbe essere più o meno il seguente:

calendar control

Ora un doppio click su un qualsiasi pulsante o numero della form visualizzata inserirà la data rappresentata dal pulsante nella cella prescelta.

Se preferite invece attivare la macro attraverso un pulsante da voi posizionato in un qualunque punto del vostro Foglio di lavoro, nel modulo1 che era stato importato, troviamo il seguente codice:

modulo1 code

Questa è un'alternativa al doppio click impostato nell'evento Worksheet_BeforeDoubleClick. Si può infatti richiamare questa macro per poter visualizzare in qualunque momento il controllo calendario.

Adesso non vi resta che godere della nuova funzionalità sui vostri futuri fogli di lavoro... magari sfruttandone al meglio le possibilità studiandone metodi e personalizzazioni dal sito dell'ideatore.


Se hai gradito l'articolo, condividilo, basta un click!

Aggiungi commento


Codice di sicurezza
Aggiorna

  • logo prontopro
  • logo boutique serramento
  • koilab japan and tropical fish farm
  • Trasloco economico - gruppo Arco Traslochi
  • logo flash pulizie
  • logo revolution
  • logo planetkoi small
  • logo finiture
  • ick logo template
  • montaggio mobili trento

Realizzato da: Daniele Gagliardi
Viale Monache 3 - 38062 Arco - TN
- Contattami -

Per essere più facile ed intuitivo, il blog fa uso dei cookie, piccole porzioni di dati che consentono di capire come gli utenti navighino e ne visualizzino le pagine. I cookie non registrano alcuna informazione personale sull'utente ed eventuali dati identificabili non verranno memorizzati. La nostra Privacy Policy è cambiata: Ti invitiamo a prenderne visione. Oppure visiona la nostra Cookie Policy: