2010-08-15 7 views
4

J'essaie d'utiliser VBA dans Microsoft Word pour automatiser des opérations hautement répétitives sur des documents volumineux.Microsoft Word: Modifier la police des caractères manquants dans la police par défaut

La situation est la suivante: J'ai un texte technique contenant beaucoup de caractères spéciaux, par ex. ❨ (U + 2768) et ❩ (U + 2769). Le texte est principalement composé en Cambria, mais certains des caractères spéciaux ne sont pas trouvés dans cette police. Cependant, je sais pertinemment que tous les caractères utilisés dans le document sont présents dans DejaVu Sans Mono. Par conséquent, je voudrais que tous les personnages soient dans Cambria à l'exception de ceux qui ne peuvent pas être affichés dans cette police - ces caractères que je veux afficher dans DejaVu Sans Mono.

Dans Microsoft Word 2007, je pourrais facilement y parvenir en appuyant sur Ctrl + A, définir la police sur DejaVu Sans Mono, définir la police sur Cambria. Le deuxième changement de police ne changerait que la police de ces caractères qui peuvent être affichés dans Cambria.

Toutefois, dans Microsoft Word 2010, cela ne fonctionne apparemment pas. Chaque personnage reçoit la police Cambria, et au lieu d'afficher les caractères non trouvés dans Cambria, le symbole de point d'interrogation encadré est affiché.

Pour surmonter cela, je me suis tourné vers VBA. Il est très facile de changer la police d'un caractère donné, par ex.

Selection.Find.ClearFormatting 
Selection.Find.Replacement.ClearFormatting 
Selection.Find.Text = ChrW(10088) 
Selection.Find.Replacement.Text = ChrW(10088) 
Selection.Find.Replacement.Font.Name = "DejaVu Sans Mono" 
Selection.Find.Execute Replace:=wdReplaceAll 

Cependant, il est très amusant d'écrire le code ci-dessus pour chaque caractère (C (DejaVu) ∖ C (Cambria)) ∩ C (Doc) où C (DejaVu), C (Cambria), et C (Doc) est l'ensemble de tous les caractères dans DejaVu Sans Mono, Cambria, et mon document, respectivement.

Existe-t-il un moyen (raisonnablement simple) d'accomplir cela automatiquement? Sûrement Microsoft Word sait quels caractères sont trouvés dans Cambria et quels ne sont pas. Je veux que toutes les occurrences de ces caractères qui ne se trouvent pas dans Cambria reçoivent la police DejaVu Sans Mono.

+0

Assurément, il serait code plus facile de mettre tous les caractères spéciaux dans la deuxième police (DejaVu)? Est-ce que c'est la raison pour laquelle vous ne souhaitez pas faire cela? – Fionnuala

+0

@Remou: En général, Cambria et DejaVu Sans Mono ne semblent pas très bien ensemble. Mais les personnages comme U + 2768 sont si spéciaux que ce n'est pas important. En outre, la plupart des "caractères spéciaux" sont actuellement disponibles à Cambria. De plus, comment définissez-vous un caractère spécial? Les lettres grecques sont-elles des caractères spéciaux? –

+0

Word ne sait pas quels caractères sont présents dans quelle police. Cela est laissé à l'utilisateur final d'utiliser la police qui a les glyphes nécessaires. –

Répondre

1

Je pense que cette réponse vous aidera à atteindre votre objectif: Script for changing fonts in a Word document

+0

Comment cela va-t-il aider avec le problème du PO? La réponse liée fournit simplement un moyen de remplacer une police par une autre, n'est-ce pas? –

+0

Je suppose que parce que ma réponse a été référencée, je dirai que cela ne serait utile que si le personnage est identifié dans la boucle puis remplacé. La récursivité est nettement plus rapide que 'Selection.Find', qui utilise un moteur de type RegEx, qui place la détection de caractères à travers au moins une passe supplémentaire. Mais le code ci-dessus pourrait également être modifié pour utiliser un tableau et quelque chose d'aussi simple qu'une sélection de cas (ChrW (10088), ChrW (10087)), sinon «Ne rien faire» et que le travail serait fait. –

+0

J'essayais juste d'aider. Désolé pour tous les problèmes que j'ai causés: | – Meihua

Questions connexes