Ciao mjrossit,
Ciao, ho un problema con la convalida dati.
In A1 ho una data. In B1 ho inserito una convalida dati che fa uscire un messaggio di errore nel caso che la data inserita in questa cella è precedente a quella in A1.
La convalida funziona solo nel caso di inserimento manuale della data, non se inserita con Data Picker.
Come posso risolvere?
Questo è una nota limitazione del controllo Microsoft Date and Time Picker.
Se fosse per me, utilizzerei l'evento CloseUp del controllo per validare le date.
Io preferirei utilizzare il controllo su una Userform ma se se vuoi utilizzarlo direttamente sul foglio, potresti provare qualcosa del genere:
- Fai clic dx sulla linguetta del foglio di interesse
- Seleziona l'opzione Visualizza Codice dal ****
menu contestuale risultante
- Incolla il seguente codice:
'=========>>
Option Explicit
'--------->>
Private Sub DTPicker1_CloseUp()
Dim RngData As Range
Dim dDate As Variant
Dim iColor As Long
With Me.DTPicker1
.LinkedCell = rngConvalida.Address
dDate = .Value
End With
With Me
Set RngData = .Range("A1")
End With
If rngConvalida Is Nothing Then
Set rngConvalida = Me.Range(sCellaCollegata)
End If
With rngConvalida
If dDate < RngData.Value Then
iColor = .Font.Color
.Font.Color = vbRed
Call MsgBox( _
Prompt:="Data non valida.", _
Buttons:=vbInformation, _
Title:="DATA CANCELLATA!")
.ClearContents
.Font.Color = iColor
End If
End With
End Sub
'--------->>
Private Sub Worksheet_Activate()
Me.DTPicker1.LinkedCell = sCellaCollegata
End Sub
'<<=========
- Alt+F11 per aprire l'editor di VBA
- Alt+IM per inserire un nuovo modulo di codice
- Nel nuovo modulo vuoto, incolla il seguente codice:
'=========>>
Option Explicit
Public rngConvalida As Range
Public Const sCellaCollegata As String = "B1"
Public Const sFoglio As String = "Foglio1" '<<=== Modifica
- Ctrl+R per accedere alla finestra Project Explorer ('Gestione progetti')
- Fai doppio clic sul modulo ThisWorkbook (Questa_cartella_di_Lavoro) del file e incolla il seguente codice
'=========>>
Option Explicit
'--------->>
Private Sub Workbook_Open()
Dim mySHeet As Worksheet
Dim oleObj As OLEObject
Dim DTP As DTPicker
Set mySHeet = Me.Sheets(sFoglio)
mySHeet.Activate
Set rngConvalida = mySHeet.Range(sCellaCollegata)
Set oleObj = Me.Worksheets(1).OLEObjects("DTPicker1")
Set DTP = oleObj.Object
With oleObj
.Top = .Top + 50
.Width = 125
.Top = .Top - 50
.LinkedCell = rngConvalida.Address
End With
With DTP
.CalendarTitleBackColor = vbGreen
.CalendarTitleForeColor = vbRed
.CalendarTrailingForeColor = vbMagenta
.Value = Format(.Value, "dd/mm/yy")
End With
End Sub
'--------->>
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim sh As Worksheet
For Each sh In Me.Worksheets
If sh.Name <> sFoglio Then
sh.Activate
Exit For
End If
Next sh
End Sub
'<<=========
- Alt+Q per chiudere l'editor di VBA e tornare a Excel.
- Salva il file con l'estensione xlsm.
Potresti scaricare il mio file di prova mjrossit#2_20180525.xlsm
===
Regards,
Norman
