2016-02-02 1 views
0

Je crée un formulaire dans lequel l'entrée d'un champ est utilisée pour les calculs dans VBA afin de renvoyer une valeur qui est insérée dans un autre champ de texte. Je vais bien jusqu'à ici. Le problème est, traitant des nombres de puissance tendent à devenir assez hauts, ainsi mon code divise des watts en kilowatts ou des mégawatts selon la valeur.Word VBA Format de champ Formfield

Si le nombre est divisé par 1000 en kW, je voudrais que le format du champ soit "#. ## 0,00 kW". S'il est divisé par 1 000 000 en mégawatts, le format doit être "#. ## 0,00 MW".

Des suggestions sur comment faire cela?

Mon code ressemble à ceci (partie précédente est hors de propos):

Dim Module As String, Power As Integer, Technology As String, TechLong As String, NumberOfCells As Integer 

Module = ActiveDocument.FormFields("ModType").Result 
Power = Mid(Module, 4, 3) 
Technology = Mid(Module, 9, 1) 
NumberOfCells = Mid(Module, 10, 2) 

' Project information 
Dim NumModules As Long, ProjectSize As Long, PowerField As FormField 

NumModules = ActiveDocument.FormFields("ModNum").Result 
ProjectSize = NumModules * Power 

Set PowerField = ActiveDocument.FormFields("TotalPower") 

If ProjectSize < 1000000 Then 
    'Change W to kW 
    PowerField.Result = ProjectSize/1000 
Else 
    'Change W to MW 
    PowerField.Result = ProjectSize/1000000 
End If 

Merci!

Répondre

1

Ma suggestion est de diviser le numéro et l'étiquette de puissance en deux champs de formulaire distincts. Désactivez la propriété "Fillin enabled" du Power Label afin que l'utilisateur ne puisse pas le modifier.

Même si l'utilisateur ne peut pas modifier le contenu de "l'étiquette", votre code peut le faire. Cette approche vous permet de laisser le formatage numérique du champ de quantité d'énergie seul. Si vous modifiez le paramètre de format numérique à l'aide de votre code, vous risquez de ne plus le protéger, puis de le protéger de nouveau. Il est toujours préférable d'éviter cette étape si cela est possible.

Donc, en supposant le champ de formulaire pour l'étiquette de puissance est nommé PowerLabel votre code pourrait ressembler à ceci:

PowerLabel = ActiveDocument.Formfields("PowerLabel") 
If ProjectSize < 1000000 Then 
    'Change W to kW 
    PowerField.Result = ProjectSize/1000 
    PowerLabel.Result = "Kw" 
Else 
    'Change W to MW 
    PowerField.Result = ProjectSize/1000000 
    PowerLabel.Result = "Mw" 
End If 
+0

C'est génial! Merci un million ... Parfois simple est mieux :-) –

+0

De rien! S'il vous plaît prenez un moment n'oubliez pas de cliquer sur la coche à côté de la "réponse" afin de faire savoir aux gens que la suggestion a résolu votre problème :-) –