› Sviluppare funzionalita su Microsoft Office con VBA › vba formato data
-
AutoreArticoli
-
Ciao a tutti.
Questa macro è per inserire una data obbligatoria nella colonna B se viene modificato il range B:AO.
E' possibile modificare la macro se viene inserito nella colonna B un valore diverso da una data si visualizzi un msgbox "errore valore non valido, inserire una data"
Private Sub Worksheet_Change(ByVal Target As Range) '------------------------------------------------------------------------------ 'data obbligatoria_new Dim avviso As String, sSh As String 'If Intersect(Target, Worksheets("convalida").Range("B7:AO66")) Is Nothing Then Exit Sub 'nei fogli If Intersect(Target, ActiveSheet.Range("B7:AO5000")) Is Nothing Then Exit Sub 'nei fogli 'If Target.Cells.Count > 1 Then Exit Sub If Cells(Target.Row, 2) = "" Then Application.EnableEvents = False Cells(Target.Row, 2).Select Application.EnableEvents = True avviso = MsgBox("Manca la data nella cella < " & _ Cells(Target.Row, 2).Address & " > !", vbCritical + vbOKOnly + vbDefaultButton2, "ERRORE!") End If '------------------------------------------------------------------------------ End SubAllegati:
You must be logged in to view attached files.Ciao Io userei una macro fatta così in modo che alla fine la convalida sia interna allamacro stessa
Sub pippo() Dim pluto pluto = InputBox("Inserire Data") On Error GoTo DataErr pluto = CDate(pluto) On Error GoTo 0 msgbox pluto Exit Sub DataErr: pluto = InputBox("La data non è corretta inserire nuova Data") Resume End SubCiao, non ho mai provato con le date, ma con la convalida dati c'è anche la possibilità di inserire in una cella "solo ed esclusivamente date"
Ciao Lucasr, c'è nella convalida dati l'opzione solo data come nell'allegato in questa risposta.
Io chiedovo di aggiungere alla macro del post #46575 una convalida dati come nell'allegato di questa risposta.
Allegati:
You must be logged in to view attached files.E' possibile modificare la macro se viene inserito nella colonna B un valore diverso da una data si visualizzi un msgbox "errore valore non valido, inserire una data"
Non ho aperto l'allegato, ma con la convalida dati puoi benissimo inserire un messaggio di errore come sopra
Io chiedevo di abbinare, unire la convalida dati alla macro.
Ovviamente va testato, ma secondo me dovresti modificare questa linea di codice:
If Cells(Target.Row, 2) = "" Thencon questa:
If Not IsDate(Cells(Target.Row, 2)) Thencon questa:
If Not IsDate(Cells(Target.Row, 2)) ThenProva a vedere cosa succede se il Target da testare contiene la stringa "31/02"
?isdate("31/02") VeroDel resto bisogna anche stare attenti che il valore non esprima un orario... risulta sempre una data valida
?isdate("11:30") Vero ?isdate("11/30") VeroE non solo IsDate accetta un formaot orario, ma lo accetta in molti formati. Uno dei quali prevede l'uso del punto come separatore, il che rende tutto ancora più una confusione (soprattutto se devi discriminare se l'input è solo numerico o anche una data):
?isdate("11.30") Vero ?isdate("30.11") FalsoOk ho potuto testare...ed ovviamente hai ragione. Comunque le date sono una brutta bestia. Io di solito ci vado giù pesante e testo tutto con una Function...poi se ci sono metodi migliori ben vengano
A questo punto io farei così:
In un modulo standard:
Option Explicit Function DataValida(ByVal data As String) As Boolean Dim datePartes() As String Dim giorno As Integer Dim mese As Integer Dim anno As Integer datePartes = Split(data, "/") If UBound(datePartes) <> 2 Then DataValida = False Exit Function End If giorno = Val(datePartes(0)) mese = Val(datePartes(1)) anno = Val(datePartes(2)) If mese < 1 Or mese > 12 Then DataValida = False Exit Function End If If giorno < 1 Or giorno > Day(DateSerial(anno, mese + 1, 0)) Then DataValida = False Exit Function End If DataValida = True End Functionmentre la nell'evento Change del foglio sostituirei questo rigo:
`If Cells(Target.Row, 2) = "" Then `con questo:
If DataValida(Cells(Target.Row, 2)) = False Thenanzi modificherei il resto così:
........ ........ ........ If DataValida(Cells(Target.Row, 2)) = False Then Application.EnableEvents = False Cells(Target.Row, 2).Select avviso = MsgBox("Manca la data nella cella < " & _ Cells(Target.Row, 2).Address & " > !", vbCritical + vbOKOnly + vbDefaultButton2, "ERRORE!") Cells(Target.Row, 2) = "" Application.EnableEvents = True End If End Sub -
AutoreArticoli
