Run time error '424' Object required

di il
17 risposte

Run time error '424' Object required

Buongiorno,

chiedo aiuto sulla sintassi di una funzione. Il debug mi da RUN TIME ERROR 424 OBJECT REQUIRED sulla riga di codice in giallo.

LastSubmission è una data , posizionando il mouse su di essa leggo "Lastsubmission=1/7/2025". Non capisco perchè il codice si blocca qui...

Cosa può essere?

Grazie in anticipo

Francesco

Function FeedbackComment(FeedbackText, FeedbackDate, LastSubmission, PromisedDate, DocumentStatus)

If DocumentStatus = "YELLOW" Or DocumentStatus = "BLU-Y" Then
    If LastSubmission Is Null Then
        If FeedbackDate Is Null Then
        FeedbackComment = "02) First submission of this document is still pending. "
        Else
            If PromisedDate Is Null Then
            FeedbackComment = "03) Last feedback dated " & FeedbackDate & " is not including an expected submission date. "
            Else
                If PromisedDate < Date Then
                FeedbackComment = "04) Last feedback dated " & FeedbackDate & " is expired because " & FeedbackText
                Else
                FeedbackComment = "05) Last feedback dated " & FeedbackDate & " is still valid. " & PromisedDate
                End If
            End If
        End If
        
    
    
    Else
        If FeedbackDate Is Null Then
        FeedbackComment = "06) There is no feedback from Vendor about this document. "
        Else
            If FeedbackDate > LastSubmission Then
                If PromisedDate Is Null Then
                FeedbackComment = "03 ) Last feedback dated "
                Else
                    If PromisedDate < Date Then
                    FeedbackComment = "04 ) Last feedback dated  " & FeedbackText
                    Else
                    FeedbackComment = "05 ) Last feedback dated" & PromisedDate
                    End If
                End If
                
            Else
            FeedbackComment = "06) Last feedback dated " & FeedbackDate & " is expired because the feedback date is before the last submission date. Last submission date: " & LastSubmission
            End If
        End If
    End If
Else
FeedbackComment = "01) For this document is not necessary any feedback by Vendor because it is already approved or under review"
End If
End Function

17 Risposte

  • Re: Run time error '424' Object required

    Non vediamo la riga di codice in giallo.

    Function FeedbackComment(FeedbackText, FeedbackDate, LastSubmission, PromisedDate, DocumentStatus)

    Secondo me non hai dichiarato esplicitamente il tipo dati di ogni parametro, che in caso di omissione viene interpretato automaticamente come Variant. 
    Non sono sicuro, ma temo che "LastSubmission=1/7/2025" non viene interpretato come tipo Data.

  • Re: Run time error '424' Object required

    Prova a scrivere:     If IsNull(LastSubmission) Then

  • Re: Run time error '424' Object required

    Non si vede la riga "gialla"

    Puoi indicare esattamente quale?

  • Re: Run time error '424' Object required

    Tanto per iniziare dichiarerei esplicitamente le variabili. Inoltre renderei più leggibile il codice utilizzando il costrutto SELECT CASE dove possibile.

  • Re: Run time error '424' Object required

    02/05/2025 - fcaliandro ha scritto:

    LastSubmission è una data , posizionando il mouse su di essa leggo "Lastsubmission=1/7/2025". Non capisco perchè il codice si blocca qui...

    Cosa può essere?

    Ciao, ....un paio di cose di sicuro "possono essere"

    1. Function FeedbackComment(FeedbackText As String, FeedbackDate As Date, LastSubmission As Date, PromisedDate As Date, DocumentStatus As String) As String
      
      OPPURE 
      
      Function FeedbackComment(FeedbackText As String, FeedbackDate As Variant, LastSubmission As Variant, PromisedDate As Variant, DocumentStatus As String) As String
      
      1. L'operatore Is Null si può usare solo sugli Oggetti oppure sul tipo Variant. Se i tuoi parametri sono di tipo Date oppure vengono interpretati come tipo Date, allora Is Null come operatore non può essere utilizzato in quanto il tipo Date non è un Oggetto.
      2. Se i parametri passati alla function possono contenere valori = Null, allora utilizzare il tipo Variant nella dichiarazione degli stessi.
        .
    2. If IsNull(LastSubmission) Then  
      1. Usare la funzione IsNull() e non l'operatore Is Null. (come ti hanno già suggerito)
        1. in tal caso questo campo data deve essere dichiarato come tipo Variant (che accetta anche valori Null) in quanto il tipo Date non prevede valori Null e riceveresti subito errore.
    3. Per nessuna riga di codice viene fornita una descrizione (commenti al codice)
      1. Non usare i commenti al codice è un errore che si paga anche nel breve periodo. Rende dificoltoso la lettura del codice, lo scopo della function e quant'altro di utile per chi ha scritto il codice o per coloro che dovranno leggerlo. E il tempo e la chiarezza è qualcosa di molto prezioso.

    .
    In sintesi : 

    • se i parametri di tipo Date passati alla function possono contenere valori Null, allora dichiarare tali parametri coil tipo Variant.
    • Se i parametri vengono dichiarati di tipo Date e potrebbero contenere valori Null, allora si riceve errore in quanto i tipi Date non consentono di contenere valori Null.
    • Se i parametri non vengono dichiarati con nessun tipo, allora sarà Access, sulla base dei valori in essi  contenuti, a interpretarli o come Date se contengono una data, oppure come Oggetti se per esempio contengono un valore Null, oppure come String se contengono un testo, oppure di Tipo Numerico secontengono solo numeri, etc...etc...
      • Nel caso in cui i parametri non sono dichiarati ovviamente i risultati sono imprevedibili... può verificarsi che in certi casi non si ricevono errori e in altri casi possono verificarsi errori bloccanti.

    .
    Il codice scritto per la function, non è per niente ben strutturato. I controlli non controllano. La logica e la sintassi è sbagliata. L'uso dell'operatore Is Null è errato per campi di tipo Date in quanto non sono oggetti e devono contenere un valore valido.

     
    Domanda : tra le altre cose... usi Option Explicit ?

    ;-)
    Insomma Francesco, senza offesa... le mie solo semplici osservazioni con lo scopo di farti capire alcune cose importanti, ma non va per niente bene come hai scritto il codice per la Function. Qui manca un pò di studio, te devi impegnà un po' de più ;-)

    Un pò di documentazione per avere rispsosta al tuo questito e altro di molto utile da approfondire:
    https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/function-statement
    https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/variant-data-type
    https://learn.microsoft.com/it-it/dotnet/visual-basic/programming-guide/program-structure/comments-in-code

  • Re: Run time error '424' Object required

    02/05/2025 - OsvaldoLaviosa ha scritto:

    Secondo me non hai dichiarato esplicitamente il tipo dati di ogni parametro, che in caso di omissione viene interpretato automaticamente come Variant. 
    Non sono sicuro, ma temo che "LastSubmission=1/7/2025" non viene interpretato come tipo Data.

    Ciao,

    in questo caso se non viene interpretato come Date allora viene interpretato come tipo Stringa. 

    In entrambe i casi non risulta essere un Oggetto e pertanto l'operatore Is Null non può essere utilizzato. 
    In tal caso si può utilizzare la Funzione IsNull(). 

    L'operatore Is Null potrà essere utilizzato se definito come tipo Variant o come tipo Oggetto.

  • Re: Run time error '424' Object required

    02/05/2025 - Stifone ha scritto:

    Prova a scrivere:     If IsNull(LastSubmission) Then

    Ciao, 

    si e ni.... in alcuni casi potrebbe andare bene ma manca la definizione del tipo di dati.

    il parametro non essendo definito e secondo il valore che conterrà,  può assumere sia un tipo oggetto oppure no.

    Se access lo interpreta come oggetto allora va bene utilizzare l'operatore Is Null

    Se access lo interpreta come un Valore allora l'operatore Is Null non può essere utilizzato e in tal caso si può utilizzare la funzione IsNull()

    Ma come abbiamo detto dipende dal tipo di dato in esso contenuto, quindi se una volta contiene una Data e l'altra contiene Null etc... , prima o dopo restituisce errore o per un motivo o per un altro.

  • Re: Run time error '424' Object required

    02/05/2025 - Antony73 ha scritto:

    Tanto per iniziare dichiarerei esplicitamente le variabili. Inoltre renderei più leggibile il codice utilizzando il costrutto SELECT CASE dove possibile.

    Ciao,

    esatto, proprio così... manca di logica e di tecnica.

    Dichiarare i parametri è indispensabile per determinare come essi possono successivamente essere trattati.
    E in questo caso se possono essere trattati con deglii operatori come Is Null oppure con delle funzioni come IsNull().

    Quindi non è stata applicata nessuna logica per il semplice fatto di non aver dichiarato il tipo di variabile per i parametri. A quel punto il resto del codice non ha alcun senso (logico).

    ;-)

  • Re: Run time error '424' Object required

    02/05/2025 - oregon ha scritto:

    Non si vede la riga "gialla"

    Puoi indicare esattamente quale?

    Ciao,

    personalmente intravedo tutte righe Gialle... oserei dire Rosse per essere più corretti. ;-)

    Purtroppo non avendo dichiarato per i Parametri il tipo di Variabile, tutto il resto del codice risulta errato e/o corretto secondo i valori contenuti nei parametri stessi.

    Quindi se la Funzione funziona  ;-)  è solo per puro caso e non per una strategia o logica o tecnica.

  • Re: Run time error '424' Object required

    Oltre a quanto avete già osservato, mi permetto di far notare il confronto su campi testo fissi... 

    Non ho mai visto confronti nel codice su stringhe derivate da scelte opzionali, che in realtà dovrebbero essere indicizzate per ovviare ad errori di digitazione... parlo del contenuto di FeedbackComment, decisamente tecnica innovativa... forse da ri-ragionare

  • Re: Run time error '424' Object required

    03/05/2025 - @Alex ha scritto:

    parlo del contenuto di FeedbackComment, decisamente tecnica innovativa... forse da ri-ragionare

    Ciao @Alex , .... e si, diciamo di si ;-)

    Io per esempio in un modulo standard farei una cosa di questo tipo con una collection : .... tu come faresti ? 

    Option Compare Database
    Option Explicit
    
    ' Initialize const collection
    Private MyConstC As Collection
    
    ' Property for get public collection
    Public Property Get MyFeedbackColl() As Collection
        If MyConstC Is Nothing Then
            Set MyConstC = New Collection
            MyConstC.Add "01) For this document is not necessary any feedback by Vendor because it is already approved or under review"
            MyConstC.Add "02) First submission of this document is still pending. "
            MyConstC.Add "03) Last feedback dated {0} is not including an expected submission date. "
            MyConstC.Add "04) Last feedback dated {0} is expired because "
            MyConstC.Add "05) Last feedback dated {0} is still valid. "
            MyConstC.Add "06) There is no feedback from Vendor about this document. "
            MyConstC.Add "07) Last feedback dated {0} is expired because the feedback date is before the last submission date. Last submission date: "
        End If
        Set MyFeedbackColl = MyConstC
    End Property
    

    e si usa in questo modo, utilizzando l'indice della collection: 
    per esempio poniamo di richiamare l'indice 1 e l'indice 3 della collection e componiamo la stringa desiderata...

    	' Volendo richiamare l'elemento 1
    	
        FeedbackComment = MyFeedbackColl(1)
        
        RESTITUISCE :
        01) For this document is not necessary any feedback by Vendor because it is already approved or under review
    
        
        ' Oppure - Volendo richiamare l'elemento 3 sostituendo il parametro all'interno della stringa con 
        ' FeedbackDate e poniamo che contenga la data del 05/05/2025
        
        FeedbackComment = Replace(MyFeedbackColl(3), "{0}", FeedbackDate)
    	
        RESTITUISCE :
    	03) Last feedback dated 05/05/2025 is not including an expected submission date.
    	
    	
    	-----------------------------------------------------------------------------------------------------------------------------
    	QUINDI PER TUTTI GLI ELEMNTI SI OTTERRA':
    	
    01) For this document is not necessary any feedback by Vendor because it is already approved or under review
    02) First submission of this document is still pending. 
    03) Last feedback dated 05/05/2025 is not including an expected submission date. 
    04) Last feedback dated 05/05/2025 is expired because 
    05) Last feedback dated 05/05/2025 is still valid. 
    06) There is no feedback from Vendor about this document. 
    07) Last feedback dated 05/05/2025 is expired because the feedback date is before the last submission date. Last submission date: 
    
    	DOVE IL SEGNAPOSTO {0} VIENE SOSTITUITO PER ESEMPIO CON LA DATA DI CUI ESEMPIO SOPRA RIPORTATO  

    .
    @Alex  dammi un feedback ;-)  dimmi se è troppo contorto o se si può fare meglio (penso sicuramente di si)  .... grazie   ;-)     

    Da una parte mi spiace per fcaliandro, sembra il nostro un accanimento. ;-)
    Invece è solo un modo per segnalare diverse cose che possono essere sicuramente fatte meglio e con criterio.

    Spero che non se la prenda, ma che possa far tesoro delle indicazioni date, approfondire gli argomenti trattati e capire il perchè di tutte queste segnalazioni.

    Alla fine si cerca solo di dare indicazioni utili. 

  • Re: Run time error '424' Object required

    Ciao Franco, io pensavo semplicemente servisse una Tabella con i messaggi Indice+Descrizione...

  • Re: Run time error '424' Object required

    05/05/2025 - @Alex ha scritto:

    Ciao Franco, io pensavo semplicemente servisse una Tabella con i messaggi Indice+Descrizione...

    Pure io all'inizio... poi ho visto che concatenava nelle stringhe ... per esempio lui riporta:

                FeedbackComment = "03) Last feedback dated " & FeedbackDate & " is not including an expected submission date. "

    quindi concatenando la FeedbackDate all'interno delle costanti , allora ho pensato ad un semplice segnaposto da sostituire in fase di reperimento dell'item della collection con un semplice replace....

    per esempio per l'elemento 3 :
    FeedbackComment = Replace(MyFeedbackColl(3), "{0}", FeedbackDate)
    e se FeedbackDate = 05/05/2025 allora si ottiene :
    03) Last feedback dated 05/05/2025 is not including an expected submission date.

    Boh... tu che ne pensi ?

  • Re: Run time error '424' Object required

    05/05/2025 - By65Franco ha scritto:

    05/05/2025 - @Alex ha scritto:

    Ciao Franco, io pensavo semplicemente servisse una Tabella con i messaggi Indice+Descrizione...

    Pure io all'inizio... poi ho visto che concatenava nelle stringhe ... per esempio lui riporta:

                FeedbackComment = "03) Last feedback dated " & FeedbackDate & " is not including an expected submission date. "

    quindi concatenando la FeedbackDate all'interno delle costanti , allora ho pensato ad un semplice segnaposto da sostituire in fase di reperimento dell'item della collection con un semplice replace....

    per esempio per l'elemento 3 :
    FeedbackComment = Replace(MyFeedbackColl(3), "{0}", FeedbackDate)
    e se FeedbackDate = 05/05/2025 allora si ottiene :
    03) Last feedback dated 05/05/2025 is not including an expected submission date.

    Boh... tu che ne pensi ?

    Probabilmente ho frainteso io il senso della concatenazione... nel senso che avevo erroneamente visto una comparazione testuale e non di Indice... ma non è cosi.

Devi accedere o registrarti per scrivere nel forum
17 risposte