CONVALIDA DATI NON FUNZIONA CON DATAPICKER

Anonimo
2018-05-24T13:41:35+00:00

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?

Grazie

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

3 risposte

Ordina per: Più utili
  1. Anonimo
    2018-05-25T12:03:19+00:00

    Ciao Ivan,

    Ciao Norman, grazie per le info. Purtroppo non mi funziona, la parte del codice che mi hai segnalato. Si blocca su as DTPicker , non me lo riconosce.

    Non mi funziona neanche il file in allegato,

    Ovviamente il codice suggerito da me funziona a me senza problemi.  Inoltre, il mio file di esempio funziona. Altrimenti, se non avesse funzionato, non l'avrei caricato! -:)

    Poi, devo dire la frase Non mi funziona non è  molto informativo!

    se lo hai fatto come dovrebbe essere il mio.

    Come accade spesso, il diavolo si nasconde nei dettagli, e dato questo commento piuttosto enigmatico, penso che sia opportuno caricare il tuo file, privo di dati sensibili, per dimostrare la dispopsizione dei toi dati e anche il controllo che stai usando,

    Eventualmente prendo comunque in considerazione anche il tuo suggerimento di farlo su useform, se può stare nel progetto che ho in corso.

    Quando ho suggerito l'uso di un Userform, ho previsto che la Userform comprendesse un controllo calendario di qualche tipo ed un paio di controlli CommandButton. Tale disposizione fornirebbe notevolmente maggiore funzionalità e flessibilità e avrebbe anche il vantaggio non trascurabile di evitare i noti problemi che riguardano l'uso dei controlli activeX direttamente su un foglio di lavoro.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2018-05-25T07:08:51+00:00

    '=========>>

    Option Explicit

    '--------->>

    Private Sub Workbook_Open()

        Dim mySHeet As Worksheet

        Dim oleObj As OLEObject

    Dim DTP As DTPicker

    Ciao Norman, grazie per le info. Purtroppo non mi funziona, la parte del codice che mi hai segnalato. Si blocca su as DTPicker , non me lo riconosce.

    Non mi funziona neanche il file in allegato, se lo hai fatto come dovrebbe essere il mio.

    Eventualmente prendo comunque in considerazione anche il tuo suggerimento di farlo su useform, se può stare nel progetto che ho in corso.

    Grazie

    Ivan

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2018-05-25T02:14:38+00:00

    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

    La risposta è stata utile?

    0 commenti Nessun commento