Question

Je travaille donc sur la création d'un document pour certaines personnes où chaque groupe, dont trois, se voit attribuer une couleur de police pour leur entrée dans le document. J'ai écrit un script VBA qui contient une liste de toutes les personnes impliquées et peut identifier la personne connectée à l'ordinateur et au groupe avec lequel ils sont. Cependant, je ne suis pas en mesure d'obtenir la couleur de la police pour se définir. J'ai enregistré un script VBA où j'ai défini la couleur de la police pour voir comment le fait Word, mais le code résultant de Selection.Font.Color = wdColorRed Ne changera pas réellement la couleur de police sélectionnée lorsque je l'ajoute à mon script VBA. Voici un exemple du code que j'utilise:

Private Sub Document_Open()

Dim Users As New Scripting.Dictionary
Dim UserID As String
Dim category As String

UserID = GetUserName 'Currently using the example at
                     'http://support.microsoft.com/kb/161394 as a function

'---Add Members of Group 1---
Users.Add "person1", "group1"
Users.Add "person2", "group1"

'---Add Members of Group 2---
Users.Add "person3", "group2"
Users.Add "person4", "group2"
Users.Add "person5", "group2"

'---Add Members of Group 3---
Users.Add "person6", "group3"
Users.Add "person7", "group3"

For Each user In Users.Keys
    If user = UserID Then
        If Users.Item(user) = "group1" Then
            Selection.Font.Color = wdColorRed
        ElseIf Users.Item(user) = "group2" Then
            Selection.Font.Color = wdColorGreen
        ElseIf Users.Item(user) = "group3" Then
            Selection.Font.Color = wdColorBlue
        Else
            Selection.Font.Color = wdColorBlack
        End If
    End If
Next

End Sub
Était-ce utile?

La solution

AFAIK, vous ne pouvez pas définir une couleur de police par défaut pour un utilisateur spécifique. Même si vous avez réussi, disons, à le définir en bleu et à naviguer vers une phrase qui est en couleur rouge et si vous avez tapé quoi que ce soit, vous ne verrez pas de texte bleu mais de texte rouge. Parce que la position où se trouve le curseur choisira la couleur d'origine qui a été utilisée pour colorer cette phrase.

Pour définir une couleur spécifique pour un utilisateur, vous devrez soit soit

  1. Identify a range and set the color for it. Mais comme je l'ai mentionné ci-dessus, si l'utilisateur navigue vers une plage différente, le nouveau paramètre de couleur ne s'appliquera pas là-bas.

  2. Set it for the entire document. Si vous le définissez pour l'ensemble du document, la couleur de l'ensemble du document changera et je suis sûr que ce n'est pas ce que vous voulez.

Autres conseils

Bases de solution de contournement sur Application.WindowSelectionChange Event. Par conséquent, vous devez conserver les étapes suivantes:

1. Créer le module de classe
2.Nommer votre module de classe App
3.Ajouter le code suivant à App Class Module:

    Public WithEvents WRD As Application

    Private Sub WRD_WindowSelectionChange(ByVal Sel As Selection)
        'here you should place solution from your Document_Open sub
        'which defines color based on user name or...
        'you could place it somewhere else but pass color value 
        'here as a parameter

        'for test I just assumed that color should be blue
        Sel.Font.Color = wdColorBlue
    End Sub

4. dans le module standard Ajouter la variable publique:

    Public tmpApp As New App

5. Créer un sous dans un module standard, ou ajouter du code à votre Document_Open Event, qui initialisera notre classe:

Sub Document_Open_new()

    Set tmpApp.WRD = Application

    'we need to change selection once to trigger full
    'scope of solution
    'if we omit the code below new color will not work
    'if user add new text at the beginning of the document
    'right after it was opened
    Dim tmpSel As Range
    Set tmpSel = Selection.Range
    ActiveDocument.Bookmarks("\EndOfDoc").Select
    tmpSel.Select
End Sub

6.Run le document sous ou ouvert ci-dessus si le code a été ajouté à Document_open event.

---ÉDITER--- (après quelques commentaires de @Sid ci-dessous)

Il y a des inconvénients à utiliser une solution proposée. Cependant, la plupart d'entre eux pourraient être résolus en ajoutant certains If statements à l'intérieur WindowSelectionChange event. Vérification de la position de Sel range Le paramètre, le texte autour et d'autres permet de décider précisément si une nouvelle couleur doit être appliquée ou non.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top