2010-07-28 4 views
2

J'ai un code de macro qui crée essentiellement quelques tables, puis tape du texte dans certains d'entre eux, puis place quelques espaces réservés de texte. Le problème apparaît lorsque j'essaie d'appliquer des styles au texte. Au début, je pensais que seuls les espaces réservés ne sont pas affectés par le code. Mais il semble que le texte régulier, sélectionné par la macro n'est pas aussi bien appliqué.Word 2007 vba - Les styles ne sont pas appliqués via la macro

Le code ressemble fondamentalement ceci:

Selection.TypeText Text:="Entreprisecost:" 
Selection.MoveRight Unit:=wdCell 
Set cc = Selection.Range.ContentControls.Add(wdContentControlText) 
cc.SetPlaceholderText Text:="Description of the cost" 
cc.DefaultTextStyle = "EnterpriseStyle" 
Selection.Style = ActiveDocument.Styles("EnterpriseStyle") 

Remarquez comment je définir le style à la fois l'espace réservé et la sélection.

Ensuite, j'ai essayé d'enregistrer une macro simple où je sélectionne la ligne entière, puis j'applique le style à la sélection. Cela fonctionne quand je suis en train d'enregistrer. Mais cela ne fonctionne pas quand je cours la macro. C'est étrange:

Selection.MoveUp Unit:=wdLine, Count:=5, Extend:=wdExtend 
Selection.Style = ActiveDocument.Styles("ExperienceStyle") 

Pourquoi cela se produit-il? Mes paramètres de sécurité macro sont définis sur le support par défaut, mais je choisis bien sûr d'activer les macros une fois le modèle ouvert. Cela se produit lorsque j'ouvre le modèle lui-même et lorsque je double-clique dessus pour créer un nouveau document basé sur le modèle. Des idées?

Editer: Chaque partie de la macro fonctionne, en plus d'appliquer des styles. Le code qui applique le style est exécuté, le texte ne change pas. Et quand je sélectionne le texte pour vérifier dans quel style il se trouve, je peux voir que le style est appliqué. Mais ce n'est pas en même temps. Étrange, si je sélectionne le texte, puis réapplique manuellement le style, ce qui signifie, en cliquant sur le même style qui est déjà sélectionné, puis je vois que le style est vraiment appliqué. C'est comme si le style était défini sans qu'il soit réellement appliqué.

+1

en lisant ci-dessus, je ne suis pas sûr de ce que vous voulez arriver - quel que soit le code que vous avez actuellement. peut-être que vous pourriez éditer et expliquer votre état désiré et alors peut-être qu'une solution pourrait être appliquée pour cela. – Meihua

+0

Eh bien, je veux que le style soit appliqué à la sélection. Avec le code ci-dessus, le style n'est pas appliqué et je trouve cela étrange. –

Répondre

2

D'abord, vous devez nous aider avec le code et mettre en place. Je suppose que vous avez au moins un tableau six par deux avec la sélection dans la cellule 6,1 (bas, cellule gauche). Deuxièmement, ne nous faites pas deviner quelles sont les variables; utilisez les instructions Dim. Troisièmement, nous n'avons pas vos styles, donc je les ai changés en standards Normal.dot. Cela dit, votre code fonctionne très bien comme ci-dessous. La seule mauvaise chose que je peux voir est que vous avez utilisé ExperienceStyle dans la première partie et EnterpriseStyle dans la première partie. Vous obtiendriez une erreur si l'un n'existait pas.

Public Sub Test() 
    Selection.TypeText Text:="Entreprisecost:" 
    Selection.MoveRight Unit:=wdCell 

    Dim cc As ContentControl 
    Set cc = Selection.Range.ContentControls.Add(wdContentControlText) 
    cc.SetPlaceholderText Text:="Description of the cost" 
    cc.DefaultTextStyle = "Title" 
    Selection.Style = ActiveDocument.Styles("Title") 
    Selection.Style = ActiveDocument.Styles("Strong") 'Proof the style is being changed. 

    Selection.MoveUp Unit:=wdLine, Count:=5, Extend:=wdExtend 
    Selection.Style = ActiveDocument.Styles("Strong") 
End Sub 
+0

Oui, les styles existent. Et tout fonctionne bien quand je suis en train d'enregistrer la macro. Je peux en fait cliquer sur Enregistrer une macro, puis taper du texte, puis sélectionner le texte, puis appliquer le style. Et en vérifiant la macro, je peux voir le code. Mais quand je reviens et exécute la macro enregistrée, je peux voir que le texte est écrit, la sélection est faite, mais le style n'est pas appliqué. Le code qui a appliqué le style est exécuté, mais le style n'est pas vraiment appliqué. Étrangement, faire cela dans un nouveau document semble fonctionner correctement. Même avec des polices non standard. Peut-être que je dois refaire le modèle alors? –

1

Je pense que votre problème est que vous n'effacez pas le format avant d'appliquer un nouveau style. Essayez de faire cela et dites-nous si cela fonctionne

Questions connexes