424 runtime error



  • 424 runtime error
    di Giuseppe (utente non iscritto) data: 26/05/2009

    Ciao,

    uso excel xp, e la chiamata ad una funzione molto semplice passando un oggetto range per riferimento, mi dà il fatidico:

    "runtime error '424' - object required"

    è un codice molto semplice, che riporto. e' indifferente passare l'oggetto alla funzione per riferimento o per valore.
    il paradosso è che se alla funzione passo direttamente il range e non un oggetto prima definito con set, l'errore sparisce misteriosamente.

    qualcuno sa illuminarmi?

    grazie
     
    Dim ColumnF As Range    
    Set ColumnF = Sheets("Idea").Range("F1:F6")
    MoveIdeaRows (ColumnF)  ' genera l'errore
    
    ' la subroutine ha questa signature
    
    Sub MoveIdeaRows(ByRef ColumnRange As Range)
    '...
    End Sub
    
    ' versione che non dà errore
     
    MoveIdeaRows (Sheets("Idea").Range("F1:F6"))  



  • di R (utente non iscritto) data: 26/05/2009

    Il problema è la chiamata ... moveidearows(columnf) genera un errore perchè passi l'argomento tra parentesi.
    qui sotto i due modi in cui chiamare una sub ... vedi la guida in linea a proposito dell'istruzione call.

    per le function viceversa potrai avere una casistica maggiore:
    1 puoi chiamarle esattamente come delle sub in questo caso perdi il valore restituito
    2 puoi assegnare il valore reso ad una variabile con la sintassi:

    sub test()
    dim v as string
    v = tuafunzione("tuoargomento")
    debug.print v
    end sub

    function tuafunzione(arg as string) as string
    tuafunzione = "il tuo argomento è: " & arg
    end function

    sulla possibilità di passare ryval un range rispondo con un test che potrai riprodurre quando avrai ancora dei dubbi

    sub test_byval_byref_su_range()
    dim rngbyval as excel.range
    dim rngbyref as excel.range

    set rngbyval = [a1]
    set rngbyref = [a2]

    debug.print "prima della chiamata: "
    debug.print rngbyval.address
    debug.print rngbyref.address

    verifica rngbyval, rngbyref

    debug.print "dopo la chiamata: "
    debug.print rngbyval.address
    debug.print rngbyref.address

    end sub

    sub verifica( _
    byval rng1 as excel.range, _
    byref rng2 as excel.range)
    set rng1 = [b1]
    set rng2 = [b2]
    end sub

    saluti
    r
     
    MoveIdeaRows ColumnF  '
    Call MoveIdeaRows(ColumnF)   ' genera l'errore
    






  • di R (utente non iscritto) data: 26/05/2009

    Non era chiaro come chiamare una sub ... quindi preciso:
    moveidearows columnf
    call moveidearows(columnf)

    saluti
    r





  • di Giuseppe (utente non iscritto) data: 26/05/2009

    Grazie mille!

    c'era un po' troppo c# nella mia testa a confondermi.
    ora funziona tutto!



  • di Giuseppe (utente non iscritto) data: 26/05/2009

    Complimenti per la comodità e l'immediatezza di questo forum.



  • di R (utente non iscritto) data: 26/05/2009

    Grazie da parte di tutti
    saluti
    r