Problema Applicationcaller



  • Problema §Application.caller§
    di nemo data: 18/02/2013 19:15:21

    Salve a tutti.
    Sono nuovo del forum e prima di scrivere ho cercato un po' in rete ma non ho trovato granché.
    In pratica cerco di farmi un'idea di come funzia la proprità in oggetto in quanto non mi è affatto chiara la spiegazione della guida.
    Primo scoglio:
    Inserisco in A1 la seguente formula.
    =SE(C1=5;prova();"1000")
    Poi nell'editor VBA definisco la funzione allegata.
    Inserendo 5 in C1 ed eseguendo a step rilevo che:
    descr = "Range"
    Sulla riga dell'istruzione "Set", "Application.Caller" = "Error 2023"
    Il range "cella" non viene attivato.
    La MsgBox mostra "Chiamante Range" (OK)
    Ed il valre in A1 si aggiorna.

    La domanda è:
    Perché "cella" non si attiva visto che "Application.Caller" restituisce un range?

    Grazie dell'attenzione.
     
    Option Explicit
    
    Public Function prova() As Integer
    Application.Volatile
    Dim descr As String
    Dim cella As Range
    
    'Application.Caller.Activate
    descr = TypeName(Application.Caller)
    Set cella = Application.Caller 'qui Application.Caller da "Errore 2023"
    cella.Activate
    MsgBox ("Chiamante " & descr)
    prova = [c1].Value * 3
    End Function



  • di Vecchio Frac data: 18/02/2013 21:24:57

    Caller è una delle funzioni più oscure di Excel :)

    La tua funzione è simile a questa:

    Function prova2()
    Dim cella As Range
    Set cella = [a2]
    cella.Activate
    End Function

    Non funzionerà nemmeno questa.
    E' uno dei limiti delle funzioni personalizzate. Finchè sono in esecuzione, Excel non può perdere il riferimento alla cella in cui si trova e quindi non permette nè Select nè Activate nè per esempio Interior.Color o altro.
    Qualche post fa avevamo scoperto un trucco per simulare il rollover mediante gli hyperlinks.





  • di nemo data: 18/02/2013 22:59:31

    mmh...
    Intanto ti ringrazio per la risposta che mi ha fatto capire, almeno un po', la causa del mancato funzionamento.
    E cioè perché le UDF, se inserite come formule, devono sottostare alle regole delle funzioni del foglio che non permettono, in senso stretto, anche sotto condizione soddisfatta, di selezionare / modificare altre celle e quindi, per estensione, di selezionare nemmeno se stesse se la cella attiva è un'altra (possono solo modificare il valore della cella in cui sta la formula che le ha chiamate.

    Riguardo poi all'oscurità di Caller, avresti qualche link che la tratta in maniera un po' organica?

    Grazie ancora, ciao