2017-06-21 2 views
-1

Quelqu'un peut-il m'aider s'il vous plaît.Les valeurs ne sont pas calculées dans Userform

J'ai une forme d'utilisateur qui a un certain nombre de champs numériques. Le problème est que ma boîte Total ne les calculera pas car elle reconnaît un nombre sous forme de texte. Donc par exemple si je devais dire HE.Value (10) + ME.Value (10) par exemple should = 20 cependant le Total arrive à 1010. et si je le * je reçois à la place une erreur pour déboguer comme ça reconnaît la valeur en format texte.

Je n'ai jamais eu ce problème sous une forme d'utilisateur auparavant. Est-ce que quelqu'un est en mesure d'aider s'il vous plaît?

Merci,

+0

Vous devez diffuser vos chaînes sous forme numérique, par ex. essayez 'CINT (ME.VALUE)' si ce sont des entiers ou 'CLNG (ME.VALUE)' s'ils ont des décimales – MiguelH

+0

@MiguelH Merci, je ne sais pas pourquoi je n'ai pas pensé à ça. Excellent merci pour la réponse – MBrann

+0

Vous pouvez également être intéressé par ce ..http: //www.ozgrid.com/VBA/validate-numbers.htm – MiguelH

Répondre

2

Vous avez:

totalBox.Text = box1.Text + box2.Text 

Lorsque les deux opérandes sont String, l'opérateur + travaille comme opérateur de concaténation de chaîne, ce qui signifie qu'il fonctionne exactement comme l'opérateur &. Voilà comment vous obtenez 1010 au lieu de 20: VBA pense que vous le demandez à concaténer chaînes.

VBA ne peut pas faire d'arithmétique sur les chaînes, donc si vos chaînes représentent des valeurs numériques, vous devez d'abord les convertir.

Si vous ne travailler avec des nombres entiers, vous pouvez le faire avec la fonction de conversion de type CLng:

totalBox.Text = CStr(CLng(box1.Text) + CLng(box2.Text)) 

avis ce fait la conversion de retour à chaîne explicite (CStr); laissez-le et VBA effectuera implicitement cette conversion de type.

+0

@ A.S.H c'est probablement correct, trop paresseux pour vérifier, édité ... sacrément conversions de type implicite partout ... –