Sviluppare funzionalita su Microsoft Office con VBA calcoli automatici in userform

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

    Frasubb
    Partecipante
      1 pt

      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 Sub

       

      Quando 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.Value
      
      

      Dove 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

       

      #54439 Score: 0 | Risposta

      Frasubb
      Partecipante
        1 pt

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

        alfrimpa
        Partecipante
          33 pts

          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

          creare listbox per ricerca record

          #54444 Score: 0 | Risposta

          Frasubb
          Partecipante
            1 pt

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

            alexps81
            Moderatore
              58 pts

              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.Value

              dove 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 Sub

              ti 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.

              #54447 Score: 0 | Risposta

              Frasubb
              Partecipante
                1 pt

                @alexps81 Grazie !!!

                A dir poco, perfetto !!!

                chiudo

                #54453 Score: 0 | Risposta

                alexps81
                Moderatore
                  58 pts

                  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.

                  #54456 Score: 0 | Risposta

                  Frasubb
                  Partecipante
                    1 pt

                    Mi sa che c'è un piccolo errore

                    sì grazie, me ne ero accorto facendo delle prove.

                     Avrei provato a risolverlo da solo, ovviamente ti ringrazio del suggerimento e soluzione

                  Login Registrati
                  Stai vedendo 8 articoli - dal 1 a 8 (di 8 totali)
                  Rispondi a: calcoli automatici in userform
                  Gli allegati sono permessi solo ad utenti REGISTRATI
                  Le tue informazioni: