Nelle mie prove, fin qui ci sono riuscito ma una cosa non mi funziona:
Ho messo una TextBox1 per il prezzo (numero con virgola)
Ho messo una TextBox2 per la quantità (numero intero)
Ho messo una TextBox3 per il totale (numero con virgola)
ho scritto e provato questo codice che funziona:
Dim vString As String
vString = TextBox1.Text
TextBox3.Text = Val(vString) * TextBox2.Text
TextBox3.Text = Format$(TextBox3.Text, "€0.00")
se però aggiungo alla fine questa riga, per dare il giusto formato al valore che ho scritto nella TextBox1,
mi restituisce un errore e non capisco il motivo visto che è uguale a quella per la TextBox3
TextBox1.Text = Format$(TextBox1.Text, "€0.00")
:'(
E se invece scrivi cos?ì:
TextBox1.Text = Format$(Val(TextBox1.Text), "€0.00")
Anzi ti converrebbe riscrivere così:
TextBox3.Text = Val(TextBox1.Text) * Val(TextBox2.Text)
TextBox3.Text = Format$(TextBox3.Text, "€0.00")
TextBox1.Text = Format$(Val(TextBox1.Text), "€0.00")
o anche:
TextBox3.Text = Format$(Val(TextBox1.Text) * Val(TextBox2.Text), "€0.00")
TextBox1.Text = Format$(Val(TextBox1.Text), "€0.00")
Però ti converrebbe gestire l'immissione dei dati per evitare errori di battitura ecc.
Così funziona
Public Sub TextBox1_Change()
Dim vString As String
TextBox1.Text = Format$(Replace(TextBox1.Text, ",", Null) / 100, "0.00")
vString = TextBox1.Text
TextBox3.Text = Val(vString) * TextBox2.Text
TextBox3.Text = Format$(TextBox3.Text, "€0.00")
End
la prima riga mi costringe ad inserire i dati in un certo modo, senza errori, ma;
1) non mi permette di mettere il simbolo dell'euro
2) se scrivo ad esempio 150,50 e invece dovevo scrivere 140,50 non posso cambiare solo il 5 ma devo cancellare anche tutto quello che sta a destra
Guarda se questo esempio ti può essere di aiuto
Public Sub txtPrezzoCli_LostFocus()
Dim sValore, sValore2 As String
Dim i As Integer
sValore = txtPrezzoCli.Text
sValore2 = ""
For i = 1 To Len(sValore)
Select Case Mid(sValore, i, 1)
Case "0" To "9"
sValore2 &= Mid(sValore, i, 1)
Case ",", "."
sValore2 &= ","
Case Else
sValore2 &= ""
End Select
Next
If txtPrezzoCli.Text <> "" Then
txtPrezzoCli.Text = Format(Val(sValore2), "$#,0.00")
txtPrezzoCli.Alignment = 2
Else If IsNull(txtPrezzoCli.Text) Then
txtPrezzoCli.Text = "€ 0,00"
txtPrezzoCli.Alignment = 2
Endif
End
Con questo codice è indifferente se digiti i decimali separati da virgola o punto verranno in ogni caso
formattati correttamente anteponendo il simbolo dell'euro. Per esempio:
se digiti 123.50 verrà formattato € 123,50
se digiti 1236.21 verrà formattato € 1.236,21
vuott, quindi dovrei trasformare
Suggerivo insomma una cosa come segue (anche tenendo in conto qualcosa indicata nella formattazione da tornu):
Public Sub Button1_Click()
Dim vString As String
vString = TextBox1.Text
TextBox3.Text = Format$(Val(vString) * TextBox2.Text, "$#,0.00")
TextBox1.Text = Format$(Val(TextBox1.Text), "$#,0.00")
End
Tu scrivi questo, però poi non dai retta ai miei suggerimenti, potrebbe essere che io non sia stato sufficientemente chiaro, ...
Grazie Gianluigi e grazie a tutti quelli che mi hanno dato dei suggerimenti....
Facendo il punto della situazione, è che ho capito che NON ho capito come far interagire tra loro variabili diverse (ad esempio avanti ad un valore Float).
Poi succedono cose strane, ad esempio ho scritto questo codice e funziona:
Dim vStringa As String
TextBox1.Text = Format(Replace(TextBox1.Text, ",", Null) / 100, "0.00")
vStringa = TextBox1.Text
TextBox2.Text = (Val(vStringa) * 5)
Ho fatto il programma allegato con delle ValueBox che sono messe a disposizione apposta anche per la valuta, e non funziona... :rolleyes:
Poi, per quanto concerne il tuo suggerimento, parlando di controllo inserimento, avevo inteso ti riferissi a questa riga che di fatto fa in qualche modo il controllo lo fa in tempo reale
TextBox1.Text = Format(Replace(TextBox1.Text, ",", Null) / 100, "0.00")
Insomma, cerco di capire perchè se devo rifare qualche cosa di simile vado tranquillo...
Grazie mille del tuo esempio pratico, mi è molto utile.
Devi fare semplicemente così
Public Sub ValueBox1_Change()
ValueBox3.Value = ValueBox1.Value * ValueBox2.Value
End
Public Sub ValueBox2_Change()
ValueBox3.Value = ValueBox1.Value * ValueBox2.Value
End
Tu hai usato delle ValueBox impostando per La ValueBox1 e 3 la propietà Currency e per la ValueBox2 la
proprietà Number, quindi i valori che digiti in questi oggetti sono già dei valori numerici che non hai bisogno
di convertire per le operazioni matematiche.
Tu scrivi questo, però poi non dai retta ai miei suggerimenti, potrebbe essere che io non sia stato sufficientemente chiaro, ...
Grazie Gianluigi e grazie a tutti quelli che mi hanno dato dei suggerimenti....
Facendo il punto della situazione, è che ho capito che NON ho capito come far interagire tra loro variabili diverse (ad esempio avanti ad un valore Float).
Poi succedono cose strane, ad esempio ho scritto questo codice e funziona:
Dim vStringa As String
TextBox1.Text = Format(Replace(TextBox1.Text, ",", Null) / 100, "0.00")
vStringa = TextBox1.Text
TextBox2.Text = (Val(vStringa) * 5)
Ho fatto il programma allegato con delle ValueBox che sono messe a disposizione apposta anche per la valuta, e non funziona... :rolleyes:
Poi, per quanto concerne il tuo suggerimento, parlando di controllo inserimento, avevo inteso ti riferissi a questa riga che di fatto fa in qualche modo il controllo lo fa in tempo reale
TextBox1.Text = Format(Replace(TextBox1.Text, ",", Null) / 100, "0.00")
Insomma, cerco di capire perchè se devo rifare qualche cosa di simile vado tranquillo...
Grazie mille del tuo esempio pratico, mi è molto utile.
In riferimento al programma allegato io farei così, togliendo il calcolo da Change a aggiungendo un pulsante e userei Change per controllare il numero intero:
Public Sub ValueBox2_Change()
Dim s As String
s = Right(ValueBox2.Text)
If s = "," Then
Message.Warning("Attenzione immettere solo numeri interi", "OK")
ValueBox2.Value = Int(ValueBox2.value)
Endif
End
Public Sub Button1_Click()
ValueBox3.Value = ValueBox1.Value * ValueBox2.Value
End
Circa il mio suggerimento, non era rivolto a quel codice che peraltro ti sconsiglio dall'usare, cambiare il valore introdotto è pratica fuorviante nei confronti dell'utente.
Ti avevo postato l'esempio proprio per meglio spiegarlo.
Alla fine, nelle mie sperimentazioni ho fatto così:
Con cinque TextBox
La 1 per l'importo
La 2 per il rincaro
La 3 per l'importo rincarato
La 4 per l'IVA
La 5 per l'importo ivato
Durante la digitazione della valuta, per costringere ad utilizzare solo numeri e/o la virgola, ho utilizzato questo codice:
Public Sub TextBox1_KeyRelease()
Dim vIntercetta As String
vIntercetta = TextBox1.Text
If Val(vIntercetta) Not Val(vIntercetta)
TextBox1.Text = ""
Endif
End
Durante la digitazione dei rincari, per costringere ad utilizzare solo numeri interi, ho utilizzato questo codice:
Public Sub TextBox2_KeyRelease()
Dim vIntercetta As String
vIntercetta = TextBox2.Text
If Val(vIntercetta) Not Val(vIntercetta)
TextBox2.Text = ""
Endif
TextBox2.Text = Replace$(TextBox2.Text, ",", "")
End
Per effettuare il calcolo automatico, ho utilizzato questo codice che, per evitare errori nel calcolo:
1) Se i valori sono nulli mette lo zero
2) Toglie il simbolo dell'euro, se presente, per lasciare l'importo "pulito" da simboli
3) Effettua il calcolo ed assegna i valori
4) Riporta tutto al formato valuta aggiungendo il simbolo dell'euro
Public Sub TextBox1_LostFocus()
If TextBox1.Text = ""
TextBox1.Text = 0
Endif
If TextBox2.Text = ""
TextBox2.Text = 0
Endif
If TextBox4.Text = ""
TextBox4.Text = 0
Endif
TextBox1.Text = Replace$(TextBox1.Text, "€ ", "")
TextBox3.Text = Replace$(TextBox3.Text, "€ ", "")
TextBox5.Text = Replace$(TextBox5.Text, "€ ", "")
TextBox3.Text = Val(TextBox1.Text) + (Val(TextBox1.Text) / 100 * TextBox2.Text)
TextBox5.Text = TextBox3.Text + (TextBox3.Text / 100 * TextBox4.Text)
TextBox1.Text = Format$(Val(TextBox1.Text), "€ 0.00")
TextBox3.Text = Format$(TextBox3.Text, "€ 0.00")
TextBox5.Text = Format$(TextBox5.Text, "€ 0.00")
End
In allegato potete provare come funziona tenendo presente che il tasto calcola è solo per uscire "LostFocus()" dalle TextBox
Mi pare carino e abbastanza in linea con le mie aspettative, Voi che ne pensate ?
P.S.
Da Gian.... mi aspetto un voto :coder: