Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

inserimento data al volo

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

inserimento data al volo

Postdi nicola_na78 » 11/04/13 08:20

Ciao a tutti estiste un modo che mi permette di inserire una data senza dovere usare /?? cioè digitando 110413 diventa 11/04/2013??
grazie
nicola_na78
Utente Senior
 
Post: 147
Iscritto il: 11/06/10 15:26

Sponsor
 

Re: inserimento data al volo

Postdi Flash30005 » 11/04/13 09:55

Supponendo che le date siano nella colonna A (da A2 a A1000)
Inserisci nel Vba del foglio questo codice
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Area = "A2:A1000"
If Not Application.Intersect(Target, Range(Area)) Is Nothing Then
Application.EnableEvents = False
MioNum = Format(Target, "000000")
Miadata = CDate(Left(MioNum, 2) & "/" & Mid(MioNum, 3, 2) & "/20" & Right(MioNum, 2))
Target = Miadata
Application.EnableEvents = True
End If
End Sub

Ad ogni digitazione, come da te indicato, ottieni la data richiesta

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: inserimento data al volo

Postdi nicola_na78 » 11/04/13 10:53

grazie flash. funziona
Buona giornata
nicola_na78
Utente Senior
 
Post: 147
Iscritto il: 11/06/10 15:26

Re: inserimento data al volo

Postdi wallace&gromit » 11/04/13 11:45

comunque, se stai inserendo date dell'anno corrente, il metodo più rapido è scrivere "11/4", basterà a excel per capire 11/04/2013!
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1421
Iscritto il: 16/01/12 14:21

Re: inserimento data al volo

Postdi ricky53 » 11/04/13 11:47

Ciao,
letto quanto scritto da W&G ...

Io aggiungo:
ovviamente la digitazione deve essere costituita da "6" caratteri altrimenti ...

Prova a scrivere "11413" volendo intendere 11 aprile del 2013
oppure
Prova a scrivere "1313" volendo intendere 1 marzo del 2013

Io inserirei un controllo sulla lunghezza della data inserita altrimenti potresti avere ... date diverse da quelle inserite senza accorgetene, come visto prima.


A mio avviso queste scelte di trasformare le data digitate sono ... da evitare perchè possono generare date non rispondenti a quanto l'utente ha scritto.


CONSIGLIO: utilizzando il tastierino numerico l'inserimento delle date è molto facile !
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: inserimento data al volo

Postdi scossa » 11/04/13 13:14

Ciao,
ricky53 ha scritto:Ciao,
A mio avviso queste scelte di trasformare le data digitate sono ... da evitare perchè possono generare date non rispondenti a quanto l'utente ha scritto.

condivido l'opinione di Ricky, linserimento delle date è sempre rognoso e andrebbe gestito con molta attenzione.

Flash30005 ha scritto:Supponendo che le date siano nella colonna A (da A2 a A1000)
Inserisci nel Vba del foglio questo codice
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Area = "A2:A1000"
If Not Application.Intersect(Target, Range(Area)) Is Nothing Then
Application.EnableEvents = False
MioNum = Format(Target, "000000")
Miadata = CDate(Left(MioNum, 2) & "/" & Mid(MioNum, 3, 2) & "/20" & Right(MioNum, 2))
Target = Miadata
Application.EnableEvents = True
End If
End Sub



Una semplificazione, al codice sopra, sempre con l'obbligo di digitare la data a 8 cifre e formalmanete valida:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Me.Range("A2:A1000")) Is Nothing Then
  With Target(1, 1)
    Application.EnableEvents = False
    .Value = CDate(Format(.Value, "00\/00\/0000"))
    Application.EnableEvents = True
  End With
End If
End Sub
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 424
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: inserimento data al volo

Postdi nicola_na78 » 11/04/13 14:11

ragazzi avete ragione delle volte la macro è instabile, nel senso che se digito 010112 anziche' darmi 01/01/2012 mi restituice 07/09/1927 cosa si puo' fare per risolvere il problema??
grazie
nicola_na78
Utente Senior
 
Post: 147
Iscritto il: 11/06/10 15:26

Re: inserimento data al volo

Postdi ricky53 » 11/04/13 14:26

Ciao,
fare qualcosa significa inserire diversi controlli nel codice ... nel vale la pena?
Nel tuo file ci sono tantissime date da inserire?

Normalmente vige il sacro concetto COSTI / BENEFICI !!!

Io ribadisco il consiglio di utilizzare il tastierino numerico e scrivere le date con il suggerimento di W&G abbandonando l'idea di trasformare le date digitate.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: inserimento data al volo

Postdi wallace&gromit » 11/04/13 14:44

nicola_na78 ha scritto:digito 010112 anziche' darmi 01/01/2012 mi restituice 07/09/1927
il motivo dell'errore è presto spiegato: lo zero iniziale non viene cosiderato, quindi excel considera la data con valore numerico 10112, che è appunto quella del 1927!

una possibile alternativa per velocizzare l'inserimento è scindere le colonne in giorno mese anno e poi compilare la data con la formula =data(anno;mese;giorno). In questo modo crei dei pacchetti con l'anno costante e poi col mese costante per tutti gli inserimenti che hanno stesso mese e stesso anno.
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1421
Iscritto il: 16/01/12 14:21

Re: inserimento data al volo

Postdi nicola_na78 » 11/04/13 15:20

Ragazzi mi sono accorto che la macro nn funziona quando viene immessa una data errata es anzichè scrivere 010113 scrivo 01011, la macro si impalla e non funziona più. Se chiudo e riapro excel tutto funziona...
si puo' modifirare la macro facendo in modo che ogni volta che termina l'istruzione questa svuota pure la cache di excel??? come se in pratica venisse chiuso e poi riaperto....
grazie
nicola_na78
Utente Senior
 
Post: 147
Iscritto il: 11/06/10 15:26

Re: inserimento data al volo

Postdi scossa » 11/04/13 18:09

nicola_na78 ha scritto:Ragazzi mi sono accorto che la macro nn funziona quando viene immessa una data errata es anzichè scrivere 010113 scrivo 01011, la macro si impalla e non funziona più. Se chiudo e riapro excel tutto funziona...
si puo' modifirare la macro facendo in modo che ogni volta che termina l'istruzione questa svuota pure la cache di excel??? come se in pratica venisse chiuso e poi riaperto....
grazie


E' dall'inizio che ti diciamo che la macro funziona solo se digiti 8 cifre e se queste sono formalmente una data!
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 424
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: inserimento data al volo

Postdi Anthony47 » 11/04/13 23:11

Da quello che descrivi credo che stia parlando di quando ottieni un errore all' interno della macro e la termini; in questo modo gli "Eventi" rimangono disabilitati.
Con tutte le approssimazioni che la tua richiesta comporta, in particolare riguardo errati risultati quando violi la regola dei caratteri da inserire nella cella, prova a modificare la macro di Flash come segue:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Area = "A2:A1000"
If Not Application.Intersect(Target, Range(Area)) Is Nothing Then
Application.EnableEvents = False
MioNum = Format(Target, "000000")
MiaData = CVErr(xlErrNA)
On Error Resume Next
MiaData = CDate(Left(MioNum, 2) & "/" & Mid(MioNum, 3, 2) & "/20" & Right(MioNum, 2))
Target = MiaData
Application.EnableEvents = True
End If
End Sub
In caso di errori dove il risultato non puo' essere trasformato in una data viene inserito in cella l' errore #N/D.
Come ulteriore controllo per ridurre le occasioni di errore si potrebbe controllare se la data e' compresa in un intervallo di min e max, se puoi definire delle regole in tal senso.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13903
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: inserimento data al volo

Postdi nicola_na78 » 12/04/13 08:22

Grazie Antoni47 questa modifica è perfetta, ora tutto funziona come volevo io....
grazie a tutti
nicola_na78
Utente Senior
 
Post: 147
Iscritto il: 11/06/10 15:26

Re: inserimento data al volo

Postdi scossa » 12/04/13 08:24

nicola_na78 ha scritto:Ragazzi mi sono accorto che la macro nn funziona quando viene immessa una data errata es anzichè scrivere 010113 scrivo 01011, la macro si impalla e non funziona più. Se chiudo e riapro excel tutto funziona...
si puo' modifirare la macro facendo in modo che ogni volta che termina l'istruzione questa svuota pure la cache di excel??? come se in pratica venisse chiuso e poi riaperto....
grazie


Oltre la soluzione di Anthony, modifica così il codice che avevo proposto:

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Me.Range("A2:A1000")) Is Nothing Then
  With Target(1, 1)
    If IsDate((Format(.Value, "00\/00\/0000"))) Then
      Application.EnableEvents = False
      .Value = CDate(Format(.Value, "00\/00\/0000"))
      Application.EnableEvents = True
    End If
  End With
End If
End Sub
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 424
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: inserimento data al volo

Postdi ricky53 » 12/04/13 12:04

Ciao,
il mio pensiero sulla questione l'ho espresso più volte ma incuriosito dalle due soluzioni proposte ho voluto fare alcune prove, ed ecco il risultato.

La macro di Flash con la modifica di Anthony: non mi ha dato errori

La macro di Scossa va in errore se una volta inserita una data (viene correttamente trasformata) vado in modifica della data presente ed inserisco una data diversa.
Se inserisco la stessa data non ho errori.

L'errore che ottengo è "run-time 6 Overflow" e si ha sull'istruzione
Codice: Seleziona tutto
If IsDate((Format(.Value, "00\/00\/0000"))) Then
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: inserimento data al volo

Postdi ricky53 » 12/04/13 12:52

Ciao,
altre prove.

Con la soluzione di Flash-Anthony: se non si inseriscono sei caratteri alcune date vengono alterate.

Ad esempio scrivendo "20113" intendendo 20 gennaio 2013 ma essendo un valore non univoco ... quindi si ottiene "02/01/2013"

Andrebbe inserito un opportuno controllo sul dato inserito.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: inserimento data al volo

Postdi scossa » 12/04/13 13:12

ricky53 ha scritto:La macro di Scossa va in errore se una volta inserita una data (viene correttamente trasformata) vado in modifica della data presente ed inserisco una data diversa.
Se inserisco la stessa data non ho errori.

L'errore che ottengo è "run-time 6 Overflow" e si ha sull'istruzione
Codice: Seleziona tutto
If IsDate((Format(.Value, "00\/00\/0000"))) Then


Hai ragione, non ho tenuto conto che la cella viene formattata come data; ma la soluzione è semplice, basta usare la proprietà .Value2 anziché .Value:

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Me.Range("A2:A1000")) Is Nothing Then
  With Target(1, 1)
    If IsDate((Format(.Value2, "00\/00\/0000"))) Then
      Application.EnableEvents = False
      .Value = CDate(Format(.Value2, "00\/00\/0000"))
      Application.EnableEvents = True
    End If
  End With
End If
End Sub
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 424
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: inserimento data al volo

Postdi ricky53 » 12/04/13 14:26

Ciao Scossa,
Ottimo.


Mi permetto di aggiungere un controllo sul corretto formato da inserire nelle celle:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Me.Range("A2:A1000")) Is Nothing Then
        With Target(1, 1)
            If IsDate((Format(.Value2, "00\/00\/0000"))) Then
                Application.EnableEvents = False
                .Value = CDate(Format(.Value2, "00\/00\/0000"))
                Application.EnableEvents = True
            Else
                MsgBox "Il valore  '" & Target & "'  inserito in  '" & Target.Address(0, 0) & "'  non è in formato DATA." & vbCrLf & "Il formato corretto è:  'ggmmaaaa'"
            End If
        End With
    End If
End Sub
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: inserimento data al volo

Postdi Anthony47 » 12/04/13 14:57

Con la soluzione di Flash-Anthony: se non si inseriscono sei caratteri alcune date vengono alterate.
Ad esempio scrivendo "20113" intendendo 20 gennaio 2013 ma essendo un valore non univoco ... quindi si ottiene "02/01/2013"
Il problema e' comune a tutte le proposet pubblicate, ed e' dall' inzio che diciamo che il rischio c' e'; per compensarlo ci vorrebbe un sensore neurale.

Ciao!
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13903
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: inserimento data al volo

Postdi ricky53 » 12/04/13 16:38

Ciao,
infatti il mio intervento era per evidenziare di applicare le condizioni in modo rigoroso ed allora si ha un buon margine di sicurezza dei dati inseriti.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "inserimento data al volo":


Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti

cron