Msgbox azioni associate a vbRetryCancel



  • Msgbox azioni associate a vbRetryCancel
    di FraCos data: 08/12/2016 10:50:19

    Ciao a tutti,
    mi sono appena iscritta a questo forum e spero che questa sia la modalità corretta per chiedere aiuto.

    Sto cercando di risolvere un problema con VBA dal momento che la funzione "convalida dati" di excel non mi permette di attuare il controllo che desidero.
    Esempio del problema :
    Colonna Base Colonna Incrementi Colonna Totale
    1.496,00 ...................................................... 1.496,00
    11.939,00 ....................................................... 11.939,00
    4.149,00 ........................................................ 4.149,00
    27.667,00 ...................... 5000 ..................... 27.667,00
    Totale .............................................................45.251

    La colonna "Totale" somma Base + Incrementi
    La colonna "incrementi" deve essere compilata con importi tali che la somma della Colonna Totale non superi supponiamo l'importo di "50.000"
    Nel caso in cui l'importo inserito in "incrementi" generi il superamento di tale importo ho previsto un messaggio con msgbox (come sotto indicato).

    Il problema consiste nel fatto che il messaggio appare correttamente ma sia alla risposta Retry che Cancel l'importo inserito viene accettato e quindi di fatto si genera il superamento del limite di 50.000.

    Il funzionamento corretto sarebbe che "retry" ritorna sulla cella di inserimento per permettere di inserire un importo diverso, mentre Cancel dovrebbe cancellare l'importo digitato.

    Ringrazio anticipatamente chi mi potrà aiutare.
    FraCos

     
    Public Function ControllaSomma(Somma As Variant, Massimo As Variant, ByVal Target As Range)
      Dim Valore As Variant
      Valore = [Somma]
      If Valore <= Massimo Then
        ControllaSomma = Valore
      Else
        ControllaSomma = ""
        If MsgBox("messaggio", vbRetryCancel) = vbRetry Then
          Target.Activate
        Else
          Target.Clear
        End If
      End If
    End Function



  • di patel data: 08/12/2016 10:55:41

    allega un file di esempio da testare





  • di FraCos data: 08/12/2016 11:33:44

    fatto allegato file



  • di patel data: 08/12/2016 12:00:22

    in E6 hai messo una formula in cui compare anche E6, questo non è ammesso, è un riferimento circolare, comunque se vuoi ritornare sulle cella che ha fatto superare il limite non devi usare una function, ma l'evento Worksheet_Change





  • di FraCos data: 08/12/2016 12:33:32

    Grazie! Mi ero accorta dell'errore che ho commesso nella fretta di inviarti il file.
    Provo a seguire il tuo suggerimento ... anche se non so con quali risultati.... me la cavo piuttosto bene con excel ma VBA è un mondo pressochè sconosciuto per me.
    Ti ringrazio cmq moltissimo della dritta.



  • di patel data: 08/12/2016 13:39:10

    una soluzione, alla quale eri già molto vicino, potrebbe essere questa 
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 2 Then
      If Range("C6") > 50000 Then
         If MsgBox("messaggio", vbRetryCancel) = vbRetry Then
          Target.Activate
        Else
          Target.Clear
        End If
      End If
    End If
    End Sub






  • di Zer0Kelvin data: 08/12/2016 20:44:22

    Ciao a tutti.
    Ma una semplice formula non va bene? 

    ***EDIT***
    e perchè la convalida dati non va bene?
     
    =SE(A4+B4<=50000;A4+B4;"NO' BBUONO")