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-11T07:12:22+00:00

    If StringaData = "" Then FunctionDataBreve = Empty: GoTo Esci

    <cut>

    Se vi va fate sapere cosa ne pensate :-)

    A quel punto ho smesso di leggere.... ;-)

    In effetti bastava un semplice exit function :-)

    Inoltre riga da inseire anche prima di On Error GoTo Esci :-)

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-07-11T06:52:01+00:00

    If StringaData = "" Then FunctionDataBreve = Empty: GoTo Esci

    <cut>

    Se vi va fate sapere cosa ne pensate :-)

    A quel punto ho smesso di leggere.... ;-)

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-07-10T23:40:26+00:00

    Dopo la superbike :-)

    Per provare a "riassumere" e cercare di trovare una possibile soluzione all'iniziale domanda di gtsolid in relazione alla prima soluzione:

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

    La proposta è la seguente Function. Ho trasformato la sub in un'unica Function perché mi sembra più versatile sia per un utilizzo tramite evento change ma anche in caso di inserimento dati tramite una TextBox (nel foglio come nell'esempio che seguirà o in una UserForm di inserimento dati).

    Inserisco lo screen di una maschera presa per l'inserimento delle fatture emesse nel programma utilizzato per la contabilità dove l'inserimento della data di registrazione avviene tramite digitazione della data in un textbox):

    ![](http://fud.community.services.support.microsoft.com/Fud/FileDownloadHandler.ashx?fid=0f4bf95c-3fa7-4b1f-af4d-45285e1ee36f)

    Questa la Function, nella quale non ho indicato alcun vincolo di data, la quale effettua, quindi, solo la trasformazione in formato "dd/mm/yyyy" e controlla la validità.

    Ma potrebbe essere implementata ad esempio per controllare che le date inserite siano comprese entro un dato ambito temporale (ad es. per date comprese in un dato anno o in un trimestre, ecc. ecc.).

    Alla funzione va assegnata una stringa di testo (es. 010116 o 01012016 o 01/01/16 o 01/01/2016 (o altre date inserite in modalità standard).

    Come obbligo, in caso di inserimento "breve", è d'obbligo digitare sempre ddmmaa o ddmmaaaa.

    Diversamente la Function segnala la stringa di testo inserita come data non valida.

    Il risultato della Function è a sua volta una stringa di testo che però può essere convertita in data.

    '----

    'Modulo1

    Option Explicit

    '<--- Funzione che converte una stringa di testo ddmmaa o ddmmaaa in una data --->

    '<--- Una prima condizione è che le celle dove vengono inserite le date siano in formato testo --->

    '<--- Una seconda condizione è che le date in "formato breve" siano sempre inserite digitando: _

          - ggmmaa (es. 010116 per la data 01/01/2016) _

          - ggmmaaaa (es. 01012016 per la data 01/01/2016) _

          Un inserimento differente dalle due suddette modalità dà luogo ad un errore di data non valida _

          E ' sempre possibile inserire le date in modalità classica (gg/mm/aa, gg/mm/aaaa)

    '<--- la funzione potrebbe essere utilizzata per textbox presenti nel foglio o in una userform --->

    '<--- in tal caso già la text box restituisce una stringa di testo                             --->

    Public Function FunctionDataBreve(StringaData As String) As String

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

      Dim PrefissoAnnoBreve As String

      Dim Data As Date

      Dim NunChrAnno As Integer

      On Error GoTo Esci

          If StringaData = "" Then FunctionDataBreve = Empty: GoTo Esci

          If Not IsDate(StringaData) Then

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

              MsgBox "Data non valida", vbExclamation, "Data"

              FunctionDataBreve = 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)

            If MM < 1 Or MM > 12 Then Err.Raise 13

            AA = Mid(StringaData, 5, NunChrAnno)

            If Len(AA) = 2 Then

              If AA >= "00" And AA <= 29 Then

                PrefissoAnnoBreve = "20"

              Else

                PrefissoAnnoBreve = "19"

              End If

            End If

            AA = PrefissoAnnoBreve & AA

            Data = CDate(GG & "/" & MM & "/" & AA)

          Else

            Data = CDate(StringaData)

          End If

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

    Esci:

      If Err.Number <> 0 Then

        MsgBox "Data non valida", vbExclamation, "Data"

        FunctionDataBreve = vbNullString

      End If

    End Function

    '----

    Qui il link ad un file di esempio

    Inserimento Data Breve (ggmmaa o ggmmaaaa).xlsm

    Nel file è presente una cella (enorme! :-) ), la B4, dove inserendo le date, tramite l'evento Worksheet_Change, viene assegnato a se stessa il valore della data "convertito" e ad un'altra cella B14, dopo conversione in data della stringa di testo risultato della function.

    Inoltre ho inserto una TextBox nella quale inserendo la data, la stessa convertita dalla function, viene assegnata, con il comando LostFocus della textbox, alla textbox stessa, alla cella B4 e alla cella B14 dopo conversione in data.

    Senpre nel foglio è presente una cella di verifica che legge il contenuto della cella B4 tramite la formula DATA.VALORE per verificare che la data inserita (sia tramite l'evento change che tramite la textbox) rappresenti effettivamente una data.

    Se vi va fate sapere cosa ne pensate :-)

    La risposta è stata utile?

    0 commenti Nessun commento