Excel e gli applicativi Microsoft Office Inserimento formule in UserForm

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

    Gret
    Partecipante

      Buongiorno,

      spero possiate aiutarmi con questo problema..

      Ho un foglio abbastanza articolato con varie formule, tutte somme (trasportate in userform facendo sommare le textbox tra loro) tranne una..

      =(H5*$I$4*I5)+(H5*$J$4*J5)+(H5*$K$4*K5)+(H5*$L$4*L5)+(H5*$M$4*M5)+(H5*$N$4*N5)+(H5*$O$4*O5)+(H5*$P$4*P5)+(H5*$Q$4*Q5)+(H5*$R$4*R5)+(T5*$T$4)

      dove è scritto H5, I5, J5 ecc sono riferite a txt4, txt5, txt6 ecc, mentre dove è presente il segno del dollaro fanno riferimeto alle label (nel foglio, i segni col dollaro sono percentuali)..

      Sarebbe possibile fare la medesima operazione in una userform?

      Grazie mille in anticipo e buona continuazione  

      #18869 Score: 0 | Risposta

      vecchio frac
      Senior Moderator
        272 pts

        Gret, non ho capito 🙂

        Hai un userform con delle textbox e delle label, questi controlli contengono dei valori, li vuoi sommare tra loro (tranne uno) per ottenere un risultato. Qual è il problema?

        #18872 Score: 0 | Risposta

        Gret
        Partecipante

          Non so come si imposta la cosa con le label sinceramente..  

          Questo è un esempio di somma:

          TextBox150.Value = Format(CDbl("0" & TextBox140.Text) + CDbl("0" & TextBox141.Text), "0.###")

          Per le label funziona allo stesso modo? faccio un esempio, questa parte:

          =(H5*$I$4*I5) ---> txt1 = 15, label1 =20%, txt2 = 23

          si traduce in questo modo?:

          TextBox23.Value = Format(CDbl(TextBox1.Text*Label1.Caption*TextBox2.Text), "0.###")

          Sicuramente ho fatto un pastrocchio, ma coniugare le formule con VBA sono una schiappa!

          Grazie per l'aiuto

           

          #18875 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            272 pts

            E' giusto così. Le Label non hanno una proprietà Text da leggere/impostare ma una proprietà Caption. Il resto lo fa Excel attuando le conversioni numeriche necessarie (da stringa a numero), anche se poi forzi il risultato con CDbl (giusto così).

            Se poi le textbox e le label sono tutte dlela stessa forma (textBox<numero>, Label<numero>) puoi anche semplificare tutto con un ciclo For che prelevi gli indici dei diversi controlli e faccia le combinazioni necessarie.

            #18879 Score: 0 | Risposta

            Gret
            Partecipante

              Ho capito... le label (proprietà caption, quindi scriverò 10%) sono tutte percentuali (10%, 15%, 25%...) mentre le textbox sono tutti numeri.

              Non so se cambia qualcosa.

              I cicli non li so usare ancora, non so bene come funzionano. Farò così per ogni textbox e vediamo cosa esce fuori.

              Questo pomeriggio farò delle prove..

              Grazie mille del supporto  

               

              #18880 Score: 0 | Risposta

              Gret
              Partecipante

                Eccomi, avevo un pò di tempo libero e ne ho approfittato per fare delle prove.

                Niente, se inserisco il codice che ho scritto non funziona, mi va in errore.

                Se invece scrivo in questo modo:

                Private Sub TextBox1_AfterUpdate()
                TextBox3.Value = Val(Me.TextBox1.Text) * Val(Label1.Caption) * Val(Me.TextBox2.Text)
                End Sub
                
                Private Sub TextBox2_AfterUpdate()
                TextBox3.Value = Val(Me.TextBox1.Text) * Val(Label1.Caption) * Val(Me.TextBox2.Text)
                End Sub
                

                funziona, ma mi restituisce un numero intero e non un decimale..

                Esempio: 21 * 10% * 25 = 52,5 invece mi restituisce 5250.

                Allego file e grazie per il supporto.

                Allegati:
                You must be logged in to view attached files.
                #18887 Score: 0 | Risposta

                vecchio frac
                Senior Moderator
                  272 pts

                  Gret ha scritto:

                  mi restituisce 5250.

                  Sì, perchè Val() restituisce il valore della stringa fino al primo carattere non numerico. Pertanto Val("10%") restituisce 10 e non 0,1.

                  Ti conviene fare una cosa del genere:

                  TextBox1 * Val(Label1) / 100 * TextBox2
                  #18890 Score: 0 | Risposta

                  Gret
                  Partecipante

                    Ok, però appena inserisco un valore nella prima textbox e clicco sulla seconda textbox mi esce un messaggio che cita: "Tipo non corrispondente" e mi evidenzia questa riga nell'evento AfterUpdate della prima textbox..

                    TextBox3.Value = TextBox1 * Val(Label1) / 100 * TextBox2

                    poi ho cambiato così:

                    TextBox3.Value = Val(TextBox1) * Val(Label1) / 100 * Val(TextBox2)

                    e mi restituisce il risultato corretto!  

                    Ora per finire la formula...ehm..

                    = (H5*$I$4*I5)+(H5*$J$4*J5)

                    dovrei continuare a fare nello stesso modo aggiungendo i + ?

                     

                     

                    #18903 Score: 0 | Risposta

                    vecchio frac
                    Senior Moderator
                      272 pts

                      Gret ha scritto:

                      cita: "Tipo non corrispondente"

                      Secondo me (per evitare Val) potevi convertire tutta la formula con CSng:

                      TextBox3 = CSng(TextBox1 * Val(Label1) / 100 * TextBox2)

                      ma, confesso, non ho provato. Il problema con Val è anche che se metti una virgola nella textbox non te lo riconosce come un numero con virgola... ti riconosce solo la parte fino alla virgola. Per fargli riconoscere un numero decimale devi utilizzare il punto (che nella notazione anglosassone sta per la virgola decimale).

                      Viceversa se usi CSng ti riconosce correttamente la virgola decimale ma praticamente sorvola se metti il punto. La cosa migliore sarebbe fare un replace degli eventuali punti con delle virgole. Consiglierei anche la conversione esplicita delle due textbox, guarda un codice di esempio:

                      Private Sub CommandButton1_Click()
                      Dim a As Single, b As Single
                          a = TextBox1
                          b = TextBox2
                          MsgBox a * Val(Label1) / 100 * b
                      End Sub

                       

                      #18904 Score: 0 | Risposta

                      vecchio frac
                      Senior Moderator
                        272 pts

                        Gret ha scritto:

                        dovrei continuare a fare nello stesso modo aggiungendo i + ?

                        Sì. Devi assegnare i singoli risultati al valore di textbox3 già calcolato:

                        Textbox3 = Textbox3 + ...

                         

                        #18905 Score: 0 | Risposta

                        Gret
                        Partecipante

                          Grazie mille vecchiofrac per il supporto. Funziona alla grande!  

                          Posso chiedere un'altra cosa? Sempre riguardo le formule, però con condizione...

                          Ho questa bella formuletta qui:

                          =IF(Z5="x"; W5+(W5*30/100);0)

                          come si scrive in termini di VBA?

                          Grazie in anticipo della pazienza  

                           

                           

                           

                           

                          #18907 Score: 0 | Risposta

                          Gret
                          Partecipante

                            Risolto con gli option button.

                            Grazie del supporto e buona continuazione  

                            #18912 Score: 1 | Risposta

                            vecchio frac
                            Senior Moderator
                              272 pts

                              Gret ha scritto:

                              Risolto con gli option button.

                              Le istruzioni decisionali di tipo If ... Then [... Else ... End If] sono semplici da usare:

                              If Range("Z5") = "x" Then result = Range("W5") * 1.3 

                              In questo caso ti basta la forma compatta If ... Then su un'unica riga. Nota anche che per calcolare l'aumento del 30% di un numero ti basta moltiplicare il numero stesso per 1,30.

                            Login Registrati
                            Stai vedendo 13 articoli - dal 1 a 13 (di 13 totali)
                            Rispondi a: Inserimento formule in UserForm
                            Gli allegati sono permessi solo ad utenti REGISTRATI
                            Le tue informazioni: