› Sviluppare funzionalita su Microsoft Office con VBA › calcoli automatici in userform
-
AutoreArticoli
-
Ciao a tutti,
provando a farlo da solo, ho cercato di realizzare un calcolo automatico nella mia userform1 tramite questo codice
Private Sub TxtDaPag_Exit(ByVal Cancel As MSForms.ReturnBoolean) Dim accordato As Double Dim acconto As Double Dim nettoAPagare As Double Dim numeroRate As Integer Dim importoRata As Double ' Recupera i valori dalle textbox accordato = TxtAccord.Value acconto = TxtAccTo.Value numeroRate = TxtNumRate.Value ' 1. Calcolo Netto a Pagare TxtNetto_a_Pagare.Value = TxtAccord.Value - TxtAccTo.Value ' 2. Calcolo Importo Rata (senza interessi) If numeroRate > 0 Then TxtDaPag.Value = TxtNetto_a_Pagare.Value / TxtNumRate.Value Else MsgBox "Il numero di rate deve essere maggiore di zero." Exit Sub End If End SubQuando però vado a confermare l'inserimento dei dati da trasferire nel foglio di lavoro, questa cosa me la fa però prima mi segnala un errore in queste righe del codice stesso
' Recupera i valori dalle textbox accordato = TxtAccord.Value acconto = TxtAccTo.Value numeroRate = TxtNumRate.ValueDove sbaglio ?
Oltretutto non riesco a settare bene la tabulazione anche se a vederla mi sembra giusta, ma da TxtDaPag a CmdInvia, invece che andarci direttamente come da ordine di tabulazione stessa, il cursore compie di nuovo tutto il giro delle textbox presenti nella userform1. Tutto questo, cher prima funzionava bene, ovviamente usando il tasto TAB.
E' possibile risolvere per favore ?
Grazie a tutti, allego file esempio
Sto diventando matto !
Ora i calcoli me li fa bene, mi trasferisce i dati nel foglio quindi tutto ok
Unico problema che dopo quest'ultima cosa, spingendo il tasto CHIUDI della userform1, mi visualizza l'errore "di run time 13 - Tipo non corrispondente"
Che devo fare ? Dove sbaglio ?
Allego file esempio
Grazie !!!
Allegati:
You must be logged in to view attached files.Spiega passo passo cosa fai per arrivare all'errore e specifica su quali istruzioni si verifica.
Non è il mio ruolo ma faccio notare che al momento hai ben 5 discussioni aperte contemporaneamente ed io sto aspettando riscontro a questa
Spiega passo passo cosa fai per arrivare all'errore e specifica su quali istruzioni si verifica
all'errore ci arrivo in fondo, alla fine, cioè quando col tasto "conferma" (cmdInvia) delle userform1, vado ad inserire i dati sul foglio.
Questi ultimi, ripeto, me li inserisce precisamente, ma mi restituisce l'errore che allego in foto
Allegati:
You must be logged in to view attached files.Ti capita questo problema perché invocando l'evento Exit della TxtDaPag, ogni volta che sposti il focus da quella TextBox, scatta la macro. La macro prevede questo:
' Recupera i valori dalle textbox accordato = TxtAccord.Value acconto = TxtAccTo.Value numeroRate = TxtNumRate.Valuedove accordato, acconto e numeroRate le hai dichiarate variabili numeriche. Ma se per qualsiasi motivo, almeno una delle TextBox collegate a queste variabili risulta vuota, allora ti restituisce l'errore che lamenti. Proprio perché si aspetta di riceve un numero ma tu gli dai il vuoto. Quindi bisognerebbe prima verificare se esiste un valore (numerico) in quelle TextBox poi affidare il loro contenuto alle variabili.
Ad ogni modo ci sono molti errori da correggere. Il primo è che hai scritto la stessa macro sia in Private Sub TxtDaPag_Exit(ByVal Cancel As MSForms.ReturnBoolean) che in Private Sub TxtNetto_a_Pagare_Exit(ByVal Cancel As MSForms.ReturnBoolean) e non va bene.
Poi secondo me i calcoli che vuoi fare non vanno fatti quando esci da queste 2 TextBox ma quando valorizzi le 4 che ci sono prima (Debito, Accordato, Acconto e N. Rate). Perciò, dopo aver compilato queste 4 TextBox allora ci sarà il calcolo desiderato.
Poi penso che per come stai impostando la UserForm, che Netto a pagare e Importo rata dovrebbero essere "Bloccate".
Inoltre la N. Rate credo che in realtà dovrebbe essere una ComboBox piuttosto che una TextBox...ma lascio scegliere a te questi dettagli.
Al netto di quanto detto, ti consiglio una soluzione del genere:
1) cancella tutto quello che hai scritto in Private Sub TxtDaPag_Exit(ByVal Cancel As MSForms.ReturnBoolean) e in Private Sub TxtNetto_a_Pagare_Exit(ByVal Cancel As MSForms.ReturnBoolean)
2) rimpiazza il tutto con:
Private Sub TxtDebOrigin_Exit(ByVal Cancel As MSForms.ReturnBoolean) Netto_e_Pagare End Sub Private Sub TxtAccord_Exit(ByVal Cancel As MSForms.ReturnBoolean) Netto_e_Pagare End Sub Private Sub TxtAccTo_Exit(ByVal Cancel As MSForms.ReturnBoolean) Netto_e_Pagare End Sub Private Sub TxtNumRate_Exit(ByVal Cancel As MSForms.ReturnBoolean) Netto_e_Pagare End Sub Private Sub Netto_e_Pagare() Dim accordato As Double Dim acconto As Double Dim numeroRate As Long Dim v As Variant 'per ogni TextBox indicata in Array... For Each v In Array(TxtDebOrigin, TxtAccord, TxtAccTo, TxtNumRate) 'se il contenuto è vuoto... If Trim(v.Value) = "" Then 'svuota le TxtNetto_a_Pagare e TxtDaPag ed non continuare TxtNetto_a_Pagare.Value = "" TxtDaPag.Value = "" Exit Sub End If Next v 'siccome tutte le TextBox sono compilate... verifica se i valori indicati sono realmente numeri If Not (IsNumeric(TxtAccord.Value) And _ IsNumeric(TxtAccTo.Value) And _ IsNumeric(TxtNumRate.Value)) Then 'altrimenti mostra un messaggio di errore MsgBox "Inserire solo valori numerici.", vbExclamation Exit Sub End If 'tutto liscio...tutte le txt compilate e con valori numerici 'prelevare in varibili i loro valori accordato = CDbl(TxtAccord.Value) acconto = CDbl(TxtAccTo.Value) numeroRate = CLng(TxtNumRate.Value) 'si capisce, no??? If numeroRate = 0 Then MsgBox "Il numero di rate non può essere zero.", vbCritical Exit Sub End If 'mostra i valori ottenuti dalle operazioni nelle 2 TextBox TxtNetto_a_Pagare.Value = Format(accordato - acconto, "#,##0.00") TxtDaPag.Value = Format(accordato / numeroRate, "#,##0.00") End Subti ho lasciato un commento cosicché tu possa comprendere il codice.
Infine...come già fatto giustamente notare alfrimpa, ti invito anche io a portare a termine le discussioni pregresse (dandone riscontro) e non aprirne altre finché non le chiudi.
Mi sa che c'è un piccolo errore. Forse questa:
TxtDaPag.Value = Format(accordato / numeroRate, "#,##0.00")la devi sostituire con questa:
TxtDaPag.Value = Format((accordato - acconto) / numeroRate, "#,##0.00")In pratica l'importa rata deve essere la divisione della differenza tra accordato - acconto e il numero di rate
Vedi se è giusto.
-
AutoreArticoli
