› Sviluppare funzionalita su Microsoft Office con VBA › Attivare forma(freccia)
-
AutoreArticoli
-
Buongiorno, ho inserito in un foglio tramite il menù, Inserisci + Illustrazioni + Forme + Freccia in su e Freccia in giù.
Tramite un codice VBA come faccio a far apparire la freccia Su se ad esempio nella cella A1 il valore è superiore 1000, invece se nella cella B1 è inferiore a 1000 se invece i valori nelle celle A1 e B1 sono negativi esempio -10 le frecce non devono comparire?
Grazie per l'aiuto.
Uso M.S.O.P.P.2021
ciao
ma perchè non usi la formattazione classica
al posto del vba e volendo puoi scegliere una qualsiasi emoticon freccia
ce ne sono di bellissime e con una formula inserirla su una cella
Buongiorno il problema è che nelle celle vorrei inserire altre funzioni (Es.=SE(A1>5000;"limite superato";"").(Es.=SE(B1<5000;"limite Inferiore";"").
come faccio a far apparire la freccia Su se ad esempio nella cella A1 il valore è superiore 1000, invece se nella cella B1 è inferiore a 1000 se invece i valori nelle celle A1 e B1 sono negativi esempio -10 le frecce non devono comparire?
Non mi è molto chiara questa richiesta. Cosa vuol dire quando dici "invece se nella cella B1 è inferiore a 1000 se invece i valori nelle celle A1 e B1 sono negativi...."
O ti sei perso qualche pezzo di frase mentre spiegavi...o non ho compreso io la richiesta. Comunque potresti provare con il registratore di macro. Disegni una freccia, poi avvii il registratore di macro, fai qualche operazione sulla freccia giusto per far lavorare il registratore, poi interrompi la registrazione ed entri nel codice per capire cos'ha registrato. Da lì in poi esegui delle modifiche al codice creato per raggiungere il tuo scopo
Ti giro un esempio, sperando di aver interpretato bene la tua richiesta.
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) 'Inserire questo codice nel Foglio If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A1:B1")) Is Nothing Then If Range("A1") > 1000 Then ActiveSheet.Shapes.Range(Array("FrecciaSu")).Visible = True Else ActiveSheet.Shapes.Range(Array("FrecciaSu")).Visible = False End If If Range("B1") < 1000 And Range("B1") > 0 Then ActiveSheet.Shapes.Range(Array("FrecciaGiu")).Visible = True Else ActiveSheet.Shapes.Range(Array("FrecciaGiu")).Visible = False End If If Range("A1") < 0 And Range("B1") < 0 Then ActiveSheet.Shapes.Range(Array("FrecciaSu")).Visible = False ActiveSheet.Shapes.Range(Array("FrecciaGiu")).Visible = False End If End If End Sub
questo codice va messo direttamente nel foglio. Dopo aver creato le due "Frecce", le ho rinominate (FrecciaSu e FrecciaGiu)
Allegati:
You must be logged in to view attached files.Un altro esempio potrebbe essere questo:
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) 'Inserire questo codice nel Foglio If Target.Count > 1 Then Exit Sub Dim FrecciaSu As Object, FrecciaGiu As Object If Not Intersect(Target, Range("A1:B1")) Is Nothing Then Set FrecciaSu = ActiveSheet.Shapes("FrecciaSu") Set FrecciaGiu = ActiveSheet.Shapes("FrecciaGiu") FrecciaSu.Visible = IIf(Range("A1") > 1000, True, False) FrecciaGiu.Visible = IIf(Range("B1") < 1000 And Range("B1") > 0, True, False) End If Set FrecciaSu = Nothing: Set FrecciaGiu = Nothing End Sub
ciao
alex
io mi sono fermato
le due celle sono da considerare insieme
=E(A1>1000;B1>0;B1<1000)
o separate?
la freccia giù va messa quando un delle tre variabili non torna
o quando tutte e tre sono errate?
Buongiorno Gianfranco,
sinceramente, come ho spiegato, non ho compreso bene la richiesta. Diciamo che mi sono limitato a dare dei consigli su come provare a risolvere il problema tramite VBA e in più gli ho girato una paio di esempi. Aspettiamo Balodos75 per avere maggiori informazioni. A dir la verità, con le informazioni che ha ora in mano, potrebbe anche riuscirci da solo.
ciao
sai che io non non sono in sintonia con il vba
ma ho molta fantasia e qualcosa mi dice
che l'esempio non si ferma a due celle e che il risultato è frutto di una formula
spero di sbagliare perchè la macro ( perfetta per quanto esposto da Boldo) non funzionerebbe
visto che il change non intercetta le formule
vediamo sono curioso
visto che il change non intercetta le formule
Ci sarebbe un barbatrucco pero' alle solite, bisogna vedere se ne vale la pena e poi bisogna capire bene il contesto e l'esigenza reale.
Non e' possibile intercettare direttamente le celle modificate per effetto di una formula pero' si puo' impostare una variabile pubblica che monitori la cella con formula e sfruttare l'evento Worksheet_Calculate che viene scatenato quando si ricalcolano le formule. In tale evento reimpostiamo la variabile pubblica al valore della cella monitorata e contemporaneamente possiamo scrivere codice che si riferisce solo alla cella con formula che si e' appena aggiustata grazie alla stessa formula:
Option Explicit Public v As Variant Private Sub Worksheet_Calculate() If v <> Range("A1").Value Then 'code to call your macro here v = Range("A1").Value MsgBox "Fired cell A1!" End If End Sub
Se in A1 c'e' una formula e questa cambia il suo valore perche' cambiano i dati di partenza, viene scatenato l'evento Calculate che confronta il valore della variabile pubblica con la cella A1 e si accorge che ha cambiato il proprio valore, interviene.
Il sistema e' un po' macchinoso, ma puo' funzionare in contesti non troppo complessi.
-
AutoreArticoli