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ù recente
  1. Anonimo
    2016-07-10T07:49:21+00:00

    Ciao Norman la domanda era rivolta a gtsolid anche se avrei potuto specificarlo :-)

    Dopo aver letto alcuni link postati da Mauro e il tuo intervento (e testato :-) ) mi è venuto in mente che nel programmino che utilizzo per le mie fatture ho una procedura che replica l'inserimento in fomato ggmmaa o ggmmaaaa (oltre ai classici formati gg/mm/aaaa e varianti).

    Premetto che per mia abitudine, data dall'utilizzo di gestionali contabili e fiscali che impongono proprio l'inserimento "semplificato" (per poi trasformalo in data in formato gg/mm/aaaa), tendo ad inserire le date proprio in questo modo e quindi ai tempi (diversi anni fa al dire il vero) provai a replicare una cosa del genere.

    La procedura soffre di un difetto, che nel mio caso viene controllato dal fatto che alla fine di tutto comunque ho un controllo sull'anno di inserimento della data fattura e se l'anno non è quello di riferimento viene dato un avviso di data errata e cancellata la data inserita.

    Il difetto è che se inserisco ad es. 320516 (inserimento semplificato di solo 6 caratteri), che non è una data valida in "formato" gg/mm/aa", excel la riconosce comunque come data "anglosassone" e cioé aa/mm/dd e se il formato assegnato è gg/mm/aaaa ovviamente viene trasformata in 16/05/1932.

    Errore in cui non si incorre (o meglio si incorre ma che può essere "ingabbiato" con On Error GoTo "Esci" e if Error.Number <> 0) nel caso si inserisca 32052016.

    Questa la procedura (che ho riadattato per tener conto che non deve essere utilizzata per una sola cella come nel mio caso specifico).

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

    '-----

    Private Sub Worksheet_Change(ByVal Target As Range)

    'Inserimento date facilitato

    'Inserire le date in fomrato ggmmaa o ggmmaaa o nei normali formati data

    'Le celle devono essere formatate come testo

    Const Cella1 As String = "A1"

    Dim AnnoLimite As Integer

    Dim StringaData As String

    Dim GG As String, MM As String, AA As String

    Dim Data As String

    Dim NunChrAnno As Integer

    On Error GoTo Esci

      With Application

        .EnableEvents = False

        .ScreenUpdating = False

      End With

      AnnoLimite = 2010 '<=== nel mio caso faccio riferimento ad una cella nominata "AnnoLimite"

      If Target.Row > Me.Range(Cella1).Row And _

         Target.Column = Me.Range(Cella1).Column Then

          StringaData = Target.Value

          If StringaData = "" Then GoTo Esci

          If Not IsDate(StringaData) Then

            If Len(StringaData) <> 6 And Len(StringaData) <> 8 Then

              MsgBox "Data errata", vbExclamation, "Data Fattura"

              Target.Value = Empty

              GoTo Esci

            End If

            If Len(StringaData) = 6 Then

              NunChrAnno = 2

            ElseIf Len(StringaData) = 8 Then

              NunChrAnno = 4

            End If

            GG = Mid(StringaData, 1, 2)

            MM = Mid(StringaData, 3, 2)

            AA = Mid(StringaData, 5, NunChrAnno)

            Data = GG & "/" & MM & "/" & AA

          Else

            Data = Format(CDate(Target), "dd/mm/yyyy")

          End If

          If IsDate(Data) And Year(Data) >= AnnoLimite Then '<--- nel mio caso la condizione Year(Data) è solo =

            Target.Value = Format(CDate(Data), "dd/mm/yyyy")

          Else

            MsgBox "Data errata", vbExclamation, "Data Fattura"

            Target.Value = Empty

          End If

      End If

    Esci:

      If Err.Number <> 0 Then

        MsgBox "Data errata", vbExclamation, "Data Fattura"

        Target.Value = Empty

      End If

      With Application

        .EnableEvents = True

        .ScreenUpdating = True

      End With

    End Sub

    '----

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-07-09T22:25:20+00:00

    Ciao Casanamer,

    Farebbe differenza formattare le celle della colonna destinata alle date in formato testo?

    Non so se le tua domanda sia rivolta a me, a  Mauro o a gtsolid e non capisco la domanda! Fin qui tutto bene! ;-)

    Tuttavia se tu stia suggerendo l'inserimento delle date nella prima forma indicato da gtsolid, cioè

    • al posto di scrivere 09/07/2016 vorrei scrivere 09072016 e il programma dovrebbe in automatico riconoscere la data.

    avendo preventivamente imposto un formato testo, credo ciò possa rappresentare un approcchio fattibile ma non consigliabile. In tal caso, si potrebbe sfruttare l'evento change per convertire il testo in una data, forse utilizzando il metodo Range.TextToColumns, ma diventerebbe più complesso se l'utente dovesse, ad esempio, immettere la data nella forma 9072016 , cioè senza lo zero iniziale.

    Tuttavia, credo sia molto possible che io abbia frainteso il significato della tua domanda - non sarebbe nè la prima nè, purtroppo, l'ultima volta! (-:

    Approfitto per chiedere scusa a Fratello  Mauro: quando ho risposto non avevo visto la sua risposta precedente, altrimenti non avrei risposto io.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-07-09T20:14:34+00:00

    Farebbe differenza formattare le celle della colonna destinata alle date in formato testo?

    La risposta è stata utile?

    0 commenti Nessun commento