calendario in cella excel

Anonimo
2016-07-09T09:08:59+00:00

ciao a tutti

vorrei velocizzare l'immissione di date in un foglio di excel e ho pensato a 2 soluzioni:

  • al posto di scrivere 09/07/2016 vorrei scrivere 09072016 e il programma dovrebbe in automatico riconoscere la data.
  • quando una cella è selezionata, combinazione di tasti e che compaia un calendario da cui scegliere una data.

cosa mi suggerite?

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2016-07-17T06:52:18+00:00

Ma stai seguendo la procedura qui sotto(in inglese)?

E, come ti è già stato consigliato, c'è anche questo:

o la semplice, banale UserForm proposta nel mio (lontano....) primo post:

La risposta è stata utile?

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2016-07-09T14:07:29+00:00

Ciao gtsolid,

vorrei velocizzare l'immissione di date in un foglio di excel e ho pensato a 2 soluzioni:

  • al posto di scrivere 09/07/2016 vorrei scrivere 09072016 e il programma dovrebbe in automatico riconoscere la data.
  • quando una cella è selezionata, combinazione di tasti e che compaia un calendario da cui scegliere una data.

cosa mi suggerite? 

Ti sconsiglio il primo approccio.

Prova ad inserire un controllo calendario, dai controlli ActiveX, sul foglio e nel modulo di codice del foglio. incolla il segente codice:

'=========>>

Option Explicit

'--------->>

Private Sub Calendar1_Click()

    With ActiveCell

        .Value = CDbl(Calendar1.Value)

        .NumberFormat = "mm/dd/yyyy"

        .Select

    End With

End Sub

'--------->>

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim Rng As Range

    Const mioIntervallo As String = "A1:A30"                 '<<=== Modifica

    If Target.Cells.Count > 1 Then

        Exit Sub

    End If

    Set Rng = Me.Range(mioIntervallo)

    With Calendar1

        If Not Application.Intersect(Rng, Target) Is Nothing Then

            .Left = Target.Left + Target.Width - Calendar1.Width

            .Top = Target.Top + Target.Height

            .Visible = True

            .Value = Date

        ElseIf .Visible Then

            .Visible = False

        End If

    End With

End Sub

'<<=========

Cliccando sulla cella (diciamo) A10, se vedrebbe qualcosa del genere:

![](http://fud.community.services.support.microsoft.com/Fud/FileDownloadHandler.ashx?fid=c2e409c7-200a-41c8-8d08-98857732e1d2)

Potresti scaricare il mio file di esempio Gtsolid20160709.xlsm a:

https://www.dropbox.com/s/69cio917kh4twrm/Gtsolid20160709.xlsm?dl=0

===

Regards,

Norman

![](http://fud.community.services.support.microsoft.com/Fud/FileDownloadHandler.ashx?fid=080b1f2a-fb91-4e40-90d5-86aa09f2e296)

La risposta è stata utile?

0 commenti Nessun commento

52 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2016-07-10T11:49:42+00:00

    La questione delle date NON è risolvibile al 100% nella cella, almeno a mio modesto avviso.

    L'utente deve inserire la data 2/5/16. Nella cella scrive 3/5/16, invio. E poi prosegue. La data è valida ma sbagliata. Il 3 è vicino al 2 e può succedere. Diverso è se tu utilizzi un controllo. DEVI selezionare il valore e l'attenzione è diversa.

    Se hai dato un'occhiatina qui:

    Vedi la base per implementare qualcosa che dia più possibilità di scelta, anche di formati NON localizzati modificandola un po'. Sempre responsabile IT permettendo.... ;-)

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-07-10T10:41:17+00:00

    Ciao Norman,

    con la mia procedura occorre darsi una regola (come ad es. avviene con i software che utilizzo per contabilità e dichiarazioni) in caso di inserimento della data non con la modalità classica.

    Questo è un presupposto iniziale.

    L'utente se vuole poter inserire le date in maniera "semplificata" (senza le barre) deve accettare di tenere un dato comportamento.

    E la regola, in questa ipotesi, sarebbe che SE le date vengono inserite non in maniera classica debbano essere inserite digitando obbligatoriamente o "ggmmaa" oppure "ggmmaaaa".

    Quindi l'utente saprebbe che solo quelle inserite con quelle modalità sono date valide. Si tratta di decidere se accettare o meno la regola.

    Se la si accetta si sa che una data inserita 1216 (che se inserita con le barre in Excel rappresenterebbe una data valida) NON è una data valida per questa modalità di inserimento.

    Altra regola da accettare sarebbe appunto la formattazione come testo delle celle che contengono le date (da qui la mia domanda inziale in quanto se non fosse accettabile questa cosa ovviamente si dovrebbe rinunciare a monte alla procedura).

    Per quanto riguarda la data voluta, nel formato desiderato, a quel punto si cambia il formato data.

    Ad es. se imposto Format(CDate(Data), "d/m/yy") nella cella la data viene inserita come 1/1/16.

    Se impost Format(CDate(Data), "d/mm/yy") nella cella la data viene inserita come 1/01/2016.

    Anche qui si tratta di decidere come si vuole che venga visualizzata la data (ma questo lo si farebbe anche in caso di inserimento classico delle date).

    Una volta che eventualmente sia stata accettata la regola che l'utente non può fare tutto ciò che vuole, ma deve tenere un determinato comportamento di inserimento, il vero problema, come dicevo, è quello del "riconoscimento automatico" che excel fa delle date in formato americano.

    Ad es. ho impostato la condizione Year(Data) >= AnnoLimite che consente l'inserimento di date successive nell'esempio al 2010.

    Ecco che se inserisco, per errore, 290215 la procedura dovrebbe segnalarmi errore perché non esiste il 29 febbraio 2015 ma excel invece la converte in data americana e quindi viene inserita la data 15/02/2029.

    Se la condizione fosse limitata ad un dato anno (es. Year(Data) = 2015) il problema verrebbe risolto dal controllo sull'anno che non troverebbe corrispondenza con l'anno di riferimento.

    Questo aspetto lo considero un grosso limite ma se ad es. dovessi utilizzare la procedura per un programma di fatturazione dove l'anno delle date delle fatture deve essere quello dell'anno di riferimento ecco che il problema viene evitato.

    Lo stesso se dovessi inserire dei movimenti di registrazione (ad es. contabilità) per i quali la data deve essere comunque compresa in un determinato anno di riferimento.

    Mi chiedevo se non ci fosse un modo per impostare in Excel che le date vengano riconosciute come tali in base ad un particolare metodo (americano o italiano, come ad esempio viene fatto in alcune funzioni per decidere le differenze tra date come ad es. in GIORNO360).

    ciao

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-07-10T09:55:27+00:00

    Ciao Casanmaner,

    Ho provato il tuo codice e, oltre al fatto che non accetta delle 'date' che un utente potrebbe comprensibilmente pensare fossero valide, per sottolineare il problema a cui mi alludevo, considera:

    ![](http://fud.community.services.support.microsoft.com/Fud/FileDownloadHandler.ashx?fid=a99cfa20-0aae-43f4-9519-9c020fbcdfab)

    Potrei forse accettare che certe date non fossero riconsciute, ma il fatto che una data considerata come valida dall'utente possa essere male interpretata penso sia un motivo di preoccupazione.

    Magari tuo o Mauro avete idee per "superare" l'inconveniente in caso di inserimento errato in formato ggmmaa :-)

    Purtroppo, non credo che il problema sia succettibile di facile soluzione. Come per esempio sarebbe possibile per Excel di distinguere tra i due casi seguenti:

                               ![](http://fud.community.services.support.microsoft.com/Fud/FileDownloadHandler.ashx?fid=5a7d2408-7394-40d8-9796-3f1c2ba39290)

    Tuttavia, l'inserimento semplificato di date è qualcosa che è stato oggetto di innumerevoli discussioni qui e altrove e credo che i suggerimenti in questa discussione rappresentano le soluzioni migliori ad un problema vessatorio.

    ===

    Regards,

    Norman

    ![](http://fud.community.services.support.microsoft.com/Fud/FileDownloadHandler.ashx?fid=2b99714b-8c3b-4147-96a0-bfd4ef06040e)

    La risposta è stata utile?

    0 commenti Nessun commento