Run time error '424' Object required

di il
5 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

5 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à 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

Devi accedere o registrarti per scrivere nel forum
5 risposte