Msgbox azioni associate a vbRetryCancel
Hai un problema con Excel? 
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") |
Vuoi Approfondire?