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-10T08:24:00+00:00

    Tra l'altro rileggendola ci sono delle "ridondanze" che potrebbero essere evitate :-)

    Il problema principale però, come dicevo, è quello del riconoscimento di una data errata ma letta da excel come data valida in formato yy/mm/dd.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-07-10T08:07:05+00:00

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

    Più risposte, più soluzioni.

    Ciao Fratello, buona domenica.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. 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