web-dev-qa-db-fra.com

Utilisation de .NumberFormat pour mettre en forme des espaces décimaux dans Excel VBA

J'insère des données dans un document Word à partir d'une feuille de calcul Excel. Il y a une valeur qui a plus de 2 décimales. J'utilise le code suivant pour essayer de le convertir en deux décimales et le coller dans mon doc.

 wdApp.Selection.GoTo what:=-1, Name:="Device_Avail"
''Referring to the total count column in the Device Availability worksheet.
Set devAvailRow = shDevAvail.Range("A:A").Find("Overall Totals:",       
After:=Cells(1, 1), searchdirection:=xlPrevious)

''Actual piece to format value to 2 decimal places.
shDevAvail.Cells(devAvailRow.Row, 3).NumberFormat = "0.00"
devAvailPer = shDevAvail.Cells(devAvailRow.Row, 3)
wdApp.Selection.TypeText devAvailPer

La valeur n'affiche désormais que 2 décimales, mais la barre de formule en montre beaucoup plus. 

 enter image description here

Et ?Selection.Value dans la fenêtre Immediate de la console VBA affiche également 89.43448051. Et cela est collé dans mon doc. 

Pourquoi la fonction .NumberFormat peut-elle la changer à 2 décimales? Que dois-je changer?

4
Dombey

La propriété .NumberFormat formate le texte rendu et ne modifie pas la valeur stockée dans la cellule. Vous pouvez utiliser 'Range.Text' pour obtenir la valeur affichée:

Range("A1") = 99.12345
Range("A1").NumberFormat = "0.00"
Debug.Print Range("A1").Text   '  > 99.12
Debug.Print Range("A1").Value  '  > 99.12345
7
Florent B.

Le format numérique modifie uniquement le format que vous voyez . La valeur sous-jacente est VARIANT malgré tout . Essayez d’utiliser la fonction ROUND () afin de vous assurer que vous n’importez que 2 décimales.

2
Hila DG