Установка цвета шрифта при открытии документа не работает

StackOverflow https://stackoverflow.com/questions/19841777

  •  29-07-2022
  •  | 
  •  

Вопрос

Поэтому я работаю над созданием документа для некоторых людей, где каждой группе, из которой есть три, назначен цвет шрифта для их ввода в документ. Я написал сценарий VBA, который содержит список всех участников и может идентифицировать человека, вошел в компьютер и группу, с которой они находятся. Тем не менее, я не могу получить цвет шрифта, чтобы установить себя. Я записал скрипт VBA, где я установил цвет шрифта, чтобы увидеть, как это делает Word, но полученный код Selection.Font.Color = wdColorRed На самом деле не изменит выбранного цвета шрифта, когда я добавляю его в свой скрипт VBA. Вот пример кода, который я использую:

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
Это было полезно?

Решение

Afaik, вы не можете установить цвет шрифта по умолчанию для конкретного пользователя. Даже если вам удастся, скажем, установить его на синий цвет и перейти к предложению, которое в красном цвете, и если вы что -то напечатали, вы не увидите синий текст, а красный текст. Потому что положение, в котором курсор выберет исходный цвет, который использовался для окрашивания этого предложения.

Чтобы установить определенный цвет для пользователя, вам придется либо либо

  1. Identify a range and set the color for it. Анкет Но затем, как я упоминал выше, если пользователь перейдет в другой диапазон, то новая настройка цвета там не будет применяться.

  2. Set it for the entire document. Анкет Если вы установите его для всего документа, то цвет всего документа изменится, и я уверен, что это не то, что вы хотите.

Другие советы

Возможные обходные основания на Application.WindowSelectionChange Event. Анкет Поэтому вам нужно сделать следующие шаги:

1. Create Class Module
2. Назвать свой класс модуль App
3. Добавьте следующий код к 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. В стандартном модуле добавить общественную переменную:

    Public tmpApp As New App

5. Create sub в стандартном модуле или добавьте код в свой Document_Open Event, который инициализирует наш класс:

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. Заключите приведенный выше подставку один раз или откройте документ, если код был добавлен в Document_open event.

---РЕДАКТИРОВАТЬ--- (После некоторых комментариев из @SID ниже)

Есть некоторые неудобства использования предлагаемого решения. Однако большинство из них могут быть решены путем добавления некоторых If statements внутри WindowSelectionChange event. Анкет Проверка положения Sel range Параметр, текст вокруг и другие позволяют точно решить, следует ли применяться новый цвет или нет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top