Pregunta

Así que estoy trabajando en la creación de un documento para algunas personas donde a cada grupo, de los cuales hay tres, se le asigna un color de fuente para su entrada en el documento. He escrito un script VBA que contiene una lista de todos los involucrados y puede identificar a la persona que inició sesión en la computadora y el grupo con el que están. Sin embargo, no puedo hacer que el color de la fuente se establezca. Grabé un script VBA donde configuré el color de fuente para ver cómo lo hace la palabra, pero el código resultante de Selection.Font.Color = wdColorRed En realidad, no cambiará el color de fuente seleccionado cuando lo agrego a mi script VBA. Aquí hay un ejemplo del código que estoy 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
¿Fue útil?

Solución

AFAIK, no puede establecer un color de fuente predeterminado para un usuario específico. Incluso si logró, por ejemplo, configurarlo en azul y navegar a una oración que está en color rojo y si escribió algo, no verá texto azul sino texto rojo. Porque la posición donde está el cursor elegirá el color original que se usó para colorear esa oración.

Para establecer un color específico para un usuario, tendrá que

  1. Identify a range and set the color for it. Pero luego, como mencioné anteriormente, si el usuario navega a un rango diferente, entonces la nueva configuración de color no se aplicará allí.

  2. Set it for the entire document. Si lo configura para todo el documento, el color de todo el documento cambiará y estoy seguro de que esto no es lo que desea.

Otros consejos

Posibles bases de solución en Application.WindowSelectionChange Event. Por lo tanto, debe mantener los siguientes pasos:

1.cree el módulo de clase
2. Nombra tu módulo de clase App
3. Agregue el siguiente código a 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.En Módulo estándar Agregar variable pública:

    Public tmpApp As New App

5. Crear sub en el módulo estándar, o agregar código a su Document_Open Event, que inicializará nuestra clase:

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 el submarino anterior una vez o el documento abierto si el código se agregó a Document_open event.

---EDITAR--- (Después de algunos comentarios de @sid a continuación)

Hay algunos inconvenientes del uso de la solución propuesta. Sin embargo, la mayoría de ellos podrían resolverse agregando algunos If statements en el interior WindowSelectionChange event. Comprobando la posición de Sel range El parámetro, el texto alrededor y otros permiten decidir con precisión si se debe aplicar el nuevo color o no.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top