Condividi tramite

Excel 2013 - macro come formule nelle celle

Anonimo
2016-04-29T09:58:54+00:00

Buon giorno,

   ho creato una funzione vbscript in un modulo, per eseguire dei calcoli in una cella, su qualunque foglio del progetto, passando il riferimento di altre 5 celle.

Alla fine scrivo il risultato nella cella dove ho inserito la formula, fino qui non ho nessun problema.

A questo punto vorrei che il codice modifichi alcune proprietà in particolare il colore dello sfondo e la formattazione del testo della stessa cella che ha richiamato la funzione.

Ecco il codice:

Public Function MinimoAnnuale(CData As Range, CNereCor As Range, CNerePass As Range, CFissoCor As Range, CFissoPas As Range, CMinimoAnnuale As Range)

    Const NumIntero = "#.##0_ ;[Rosso]-#.##0 "

    Dim VNereCor As Long

    Dim VNerePas As Long

    Dim VFissoCor As Long

    Dim VFissoPas As Long

    Dim VMinAnnuale As Long

    Dim Risultato As Long

    If CData.Value <> "" And CNereCor.Value <> "" And CMinimoAnnuale.Value > 0 Then

        VNereCor = CLng(CNereCor.Value)

        If CNerePass.Value <> "" Then

            VNerePas = CLng(CNerePass.Value)

        Else

            VNerePas = 0

        End If

        If CFissoCor.Value <> "" Then

            VFissoCor = CLng(CFissoCor.Value)

        Else

            VFissoCor = 0

        End If

        If CFissoPas.Value <> "" Then

            VFissoPas = CLng(CFissoPas.Value)

        Else

            VFissoPas = 0

        End If

        VMinAnnuale = CLng(CMinimoAnnuale.Value)

        Risultato = ((VNereCor + VFissoCor) - (VNerePas + VFissoPas)) - VMinAnnuale

        If Risultato < 0 Then

 cellarisultato.Interior.ColorIndex = 3

cellarisultato.FormatConditions = NumIntero

        Else

cellarisultato.Interior.ColorIndex = 0

cellarisultato.FormatConditions = NumIntero

        End If

        MinimoAnnuale = Risultato

    Else

        MinimoAnnuale = ""

cellarisultato.Interior.ColorIndex = 0

    End If

End Function

Come faccio a capire qual'è la cella che esegue il codice?

Non c'è qualche riferimento che posso intercettare che dice che la chiamata è partita (per esempio) dalla cella F4 del foglio 4?

Non vorrei inserire nel passaggio di valori anche il range della cella chiamante, se possibile modificando cosi la funzione:

Public Function MinimoAnnuale(CData As Range, CNereCor As Range, CNerePass As Range, CFissoCor As Range, CFissoPas As Range, CMinimoAnnuale As Range***, CChiamante as Range***)

Spero di essere stato chiaro.

Grazie

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

1 risposta

Ordina per: Più utili
  1. Anonimo
    2016-04-29T10:39:07+00:00

    Ciao ServerUfficio,

       ho creato una funzione vbscript in un modulo, per eseguire dei calcoli in una cella, su qualunque foglio del progetto, passando il riferimento di altre 5 celle.

    Alla fine scrivo il risultato nella cella dove ho inserito la formula, fino qui non ho nessun problema.

    A questo punto vorrei che il codice modifichi alcune proprietà in particolare il colore dello sfondo e la formattazione del testo della stessa cella che ha richiamato la funzione.

    Con pochissime eccezioni, una funzione UDF (funzione utente) non può modificare il suo ambiente: può solo restituire un valore alla cella in cui si trova. Quindi, la funzione non può cambiare il colore o il carattere di qualsiasi cella.

    Per ottenere i risultati voluti, bisognerebbe sfruttare una macro.

    Ecco il codice:

    [cut]

    Publ

    Come faccio a capire qual'è la cella che esegue il codice?Non c'è qualche riferimento che posso intercettare che dice che la chiamata è partita (per esempio) dalla cella F4 del foglio 4?

    Per restituire la cella chiamante, si utilizzerebbe la proprietà Application.Caller.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento