Problema con le collection



  • Problema con le collection
    di Thgnss data: 29/10/2010

    Salve a tutti, da qualche giorno studio vba e non riesco a risolvere un piccolo problema riguardante il passaggio di una collection come argomento di una funzione.
    questo è un semplice esempio di prova che illustra il mio problema...
    non ho fatto altro che aprire vbe da un documento excel, inserire un nuovo modulo con all'interno il seguente codice:

    option explicit

    sub main()
    dim c as collection
    set c = new collection
    f (c)
    end sub


    function f(c as collection)
    msgbox ("ciao")
    end function


    quando compilo mi esce l'errore di compilazione:
    argomento non facoltativo.

    in realtà la definizione della funzione richiede un oggetto di tipo collection, ed è quello che tento di passare come argomento.

    e' apprezzato ogni tipo di aiuto

    grazie in anticipo



  • di Ricky53 (utente non iscritto) data: 30/10/2010

    Ciao,
    una funzione va richiamata in questo modo

    variabile1 = f(c)
    e
    non
    f(c)

    ciao da ricky53



  • di Thgnss (utente non iscritto) data: 31/10/2010

    Ho provato a modificare l'esempio come suggerito ma il problema persiste...



  • di Ricky53 (utente non iscritto) data: 01/11/2010

    Ciao,
    io avevo provato con la versione di excel 2003 e non avevo avuto nessun errore.
    tu che versione hai?

    ti invio le tue macro con le modifiche che ho fatto.

    ciao da ricky53
     
    option explicit 
    
    sub main() 
       dim c as collection 
       dim dato as string
       set c = new collection 
       dato = f(c) 
    end sub 
    
    
    function f(c as collection) 
       msgbox ("ciao") 
    end function 
    
    



  • di Thgnss (utente non iscritto) data: 01/11/2010

    Ciao ricky,
    in effetti avevi ragione, c'è bisogno di un assegnamento per far compilare senza alcun problema e evidentemente c'era qualche errore nel codice che avevo utilizzato per la prova.

    da quanto detto emergerebbe quindi che per richiamare una funzione ci sia bisogno di assegnarla ad una variabile, è corretto?
    in caso affermativo non è quindi possibile utilizzare funzioni che non hanno un valore di ritorno... è corretto anche questo?

    in realtà segue un semplice esempio che sembrerebbe smentire quanto appena detto:

    option explicit

    sub main()
    dim i as integer
    i = 1
    f (i)
    end sub

    function f(c as integer)
    msgbox ("ciao")
    end function


    in questo esempio richiamo una funzione senza assegnare il valore di ritorno ad alcuna variabile e il tutto compila senza problemi.

    un'altra cosa strana a riguardo è che gli stessi problemi con le collection vengono riscontrati anche con le subroutine(che non prevedono valori di ritorno) e non solo con le function.
    la porzione di codice seguente infatti evidenzia gli stessi problemi di compilazione di quella originaria (argomento non facoltativo):

    option explicit

    sub main()
    dim c as collection
    set c = new collection
    s (c)
    end sub

    sub s(c as collection)
    msgbox ("ciao")
    end sub

    grazie per il tuo aiuto ricky, ma ti sarei grato se potessi aiutarmi a fare luce su questi aspetti ancora poco chiari.
    saluti



  • di Enzo (utente non iscritto) data: 04/11/2010

    Scusate la mia intromissione ma ne approfitterei senza dover aprire una nuova discussione per chiedervi se mi potreste spiegare facendomi anche un esempio banale cosa sono e come funzionano le collection (a cosa servono), ripeto con un esempio banale?