Ciao a tutti estiste un modo che mi permette di inserire una data senza dovere usare /?? cioè digitando 110413 diventa 11/04/2013??
grazie
Moderatori: Anthony47, Flash30005
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
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.
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
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
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!nicola_na78 ha scritto:digito 010112 anziche' darmi 01/01/2012 mi restituice 07/09/1927
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
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
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
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
If IsDate((Format(.Value, "00\/00\/0000"))) Then
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
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
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
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.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"
Torna a Applicazioni Office Windows
Come impostare il formato data predefinito in excel? Autore: wallace&gromit |
Forum: Applicazioni Office Windows Risposte: 5 |
Macro sposta riga se data in colonna più vecchia di 3 mesi Autore: systemcrack |
Forum: Applicazioni Office Windows Risposte: 23 |
"Spegnere" il riconoscimento data. Autore: aggittoriu |
Forum: Applicazioni Office Windows Risposte: 2 |
Inserimento valore di una cella in testo di altra cella Autore: Ricky0185 |
Forum: Applicazioni Office Windows Risposte: 7 |
Inserimento dati su tabella da codice a barre Autore: systemcrack |
Forum: Applicazioni Office Windows Risposte: 80 |
Visitano il forum: Nessuno e 25 ospiti