› Excel e gli applicativi Microsoft Office › Inserimento formule in UserForm
-
AutoreArticoli
-
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
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?
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
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.
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
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 Subfunziona, 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.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 * TextBox2Ok, 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 * TextBox2poi 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 + ?
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 Subdovrei continuare a fare nello stesso modo aggiungendo i + ?
Sì. Devi assegnare i singoli risultati al valore di textbox3 già calcolato:
Textbox3 = Textbox3 + ...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
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.3In 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.
-
AutoreArticoli
