Frage

Ich arbeite also daran, ein Dokument für einige Leute zu erstellen, in denen jeder Gruppe, von der es drei gibt, eine Schriftfarbe für ihre Eingabe in das Dokument zugewiesen wird. Ich habe ein VBA -Skript geschrieben, das eine Liste aller Beteiligten enthält und die Person, mit der sie sich angemeldet haben, und die Gruppe, mit der sie zusammen sind, identifizieren können. Ich kann die Schriftfarbe jedoch nicht dazu bringen, sich selbst zu setzen. Ich habe ein VBA -Skript aufgezeichnet, in dem ich die Schriftfarbe festgelegt habe, um zu sehen, wie das Wort es macht, aber den resultierenden Code von Selection.Font.Color = wdColorRed Ändern Sie die ausgewählte Schriftfarbe nicht tatsächlich, wenn ich sie meinem VBA -Skript hinzufüge. Hier ist ein Beispiel für den Code, den ich verwende:

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
War es hilfreich?

Lösung

Afaik, Sie können keine Standard -Schriftfarbe für einen bestimmten Benutzer festlegen. Selbst wenn Sie es beispielsweise auf Blau einstellen und zu einem Satz in roter Farbe navigieren. Wenn Sie etwas getippt haben, sehen Sie keinen blauen Text, sondern den roten Text. Denn die Position, in der der Cursor ist, wählt die ursprüngliche Farbe aus, die verwendet wurde, um diesen Satz zu färben.

Um eine bestimmte Farbe für einen Benutzer festzulegen, müssen Sie beide beide

  1. Identify a range and set the color for it. Aber wie ich oben erwähnt habe, gilt der Benutzer, wenn der Benutzer zu einem anderen Bereich navigiert, die neue Farbeinstellung dort nicht.

  2. Set it for the entire document. Wenn Sie es für das gesamte Dokument festlegen, ändert sich die Farbe des gesamten Dokuments und ich bin sicher, dass dies nicht das ist, was Sie wollen.

Andere Tipps

Mögliche Problemumgehungsgrundlage auf Application.WindowSelectionChange Event. Daher müssen Sie die folgenden Schritte beibehalten:

1.KREATE -Klassenmodul
2. Nennen Sie Ihr Klassenmodul App
3.Add den folgenden Code zu 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.In Standardmodul Hinzufügen öffentlicher Variable:

    Public tmpApp As New App

5. Schalten Sie Sub im Standardmodul ab oder fügen Sie Ihrem Code hinzu Document_Open Event, was unsere Klasse initialisieren wird:

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

. Document_open event.

---BEARBEITEN--- (Nach einigen Kommentaren von @sid unten)

Es gibt einige Unannehmlichkeiten bei der Verwendung der vorgeschlagenen Lösung. Die meisten von ihnen konnten jedoch gelöst werden, indem einige einige hinzufügen If statements Innerhalb WindowSelectionChange event. Überprüfung nach Position von Sel range Parameter, Text um und andere ermöglichen es, genau zu entscheiden, ob neue Farbe angewendet werden sollte oder nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top