Pergunta

Portanto, estou trabalhando para criar um documento para algumas pessoas em que cada grupo, dos quais existem três, recebe uma cor de fonte para sua entrada no documento. Escrevi um script VBA que contém uma lista de todos os envolvidos e possa identificar a pessoa conectada ao computador e no grupo com o qual estão. No entanto, não consigo obter a cor da fonte para se definir. Eu gravei um script VBA onde defino a cor da fonte para ver como é a palavra, mas o código resultante de Selection.Font.Color = wdColorRed Na verdade, não alterará a cor da fonte selecionada quando eu a adicionar ao meu script VBA. Aqui está um exemplo do código que estou usando:

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
Foi útil?

Solução

Afaik, você não pode definir uma cor de fonte padrão para um usuário específico. Mesmo que você tenha conseguido, digamos, defina -o como azul e navegue para uma frase que está na cor vermelha e, se você digitar alguma coisa, não verá o texto azul, mas o texto vermelho. Porque a posição em que o cursor está escolher a cor original usada para colorir essa frase.

Para definir uma cor específica para um usuário, você terá que

  1. Identify a range and set the color for it. Mas, como mencionei acima, se o usuário navegar para um intervalo diferente, a nova configuração de cores não se aplicará lá.

  2. Set it for the entire document. Se você o definir para o documento inteiro, a cor de todo o documento mudará e tenho certeza de que não é isso que você deseja.

Outras dicas

Possíveis bases de solução alternativa em Application.WindowSelectionChange Event. Portanto, você precisa manter as seguintes etapas:

1.Criar módulo de classe
2. Nome seu módulo de classe App
3.Add o seguinte código para 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 Módulo padrão Adicionar variável pública:

    Public tmpApp As New App

5. Crie o sub no módulo padrão ou adicione código ao seu Document_Open Event, que inicializará nossa 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. Faça o submarino acima uma vez ou abra o documento se o código foi adicionado a Document_open event.

---EDITAR--- (Após alguns comentários do @sid abaixo)

Existem alguns inconvenientes do uso da solução proposta. No entanto, a maioria deles pode ser resolvida adicionando alguns If statements lado de dentro WindowSelectionChange event. Verificando a posição de Sel range Parâmetro, texto e outros permitem decidir com precisão se a nova cor deve ser aplicada ou não.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top