Login Registrati
Stai vedendo 10 articoli - dal 1 a 10 (di 10 totali)
  • Autore
    Articoli
  • #45583 Score: 0 | Risposta

    BOLDOS75
    Partecipante

      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

       

      #45585 Score: 0 | Risposta

      gianfranco55
      Partecipante
        90 pts

        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

        #45595 Score: 0 | Risposta

        BOLDOS75
        Partecipante

          Buongiorno il problema è che nelle celle vorrei inserire altre funzioni (Es.=SE(A1>5000;"limite superato";"").(Es.=SE(B1<5000;"limite Inferiore";"").

          #45600 Score: 0 | Risposta

          alexps81
          Moderatore
            55 pts

            BOLDOS75 ha scritto:

            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.
            #45603 Score: 0 | Risposta

            alexps81
            Moderatore
              55 pts

              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
              #45607 Score: 0 | Risposta

              gianfranco55
              Partecipante
                90 pts

                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?

                #45608 Score: 0 | Risposta

                alexps81
                Moderatore
                  55 pts

                  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.

                  #45609 Score: 0 | Risposta

                  gianfranco55
                  Partecipante
                    90 pts

                    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

                    #45661 Score: 0 | Risposta

                    vecchio frac
                    Senior Moderator
                      272 pts

                      gianfranco55 ha scritto:

                      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.

                      #45694 Score: 0 | Risposta

                      BOLDOS75
                      Partecipante

                        Buongiorno le due soluzioni proposte da alexps81 mi vanno tutte e due bene ringrazio per i preziosi consigli .

                        Chiudo la discussione

                      Login Registrati
                      Stai vedendo 10 articoli - dal 1 a 10 (di 10 totali)
                      Rispondi a: Attivare forma(freccia)
                      Gli allegati sono permessi solo ad utenti REGISTRATI
                      Le tue informazioni: