Domanda

Quindi sto lavorando alla creazione di un documento per alcune persone in cui ogni gruppo, di cui ce ne sono tre, viene assegnato un colore del carattere per il loro contributo nel documento. Ho scritto uno script VBA che contiene un elenco di tutti i soggetti coinvolti e può identificare la persona che ha effettuato l'accesso al computer e al gruppo con cui sono. Tuttavia, non sono in grado di ottenere il colore del carattere da se stesso. Ho registrato uno script VBA in cui ho impostato il colore del carattere per vedere come fa la parola, ma il codice risultante di Selection.Font.Color = wdColorRed In realtà non cambierà il colore del carattere selezionato quando lo aggiungo al mio script VBA. Ecco un esempio del codice che sto 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
È stato utile?

Soluzione

Afaik, non è possibile impostare un colore di carattere predefinito per un utente specifico. Anche se sei riuscito, diciamo, impostalo su blu e navighi su una frase che è di colore rosso e se hai digitato qualcosa, non vedrai il testo blu ma il testo rosso. Perché la posizione in cui è il cursore sceglierà il colore originale che è stato usato per colorare quella frase.

Per impostare un colore specifico per un utente, dovrai nessuno dei due

  1. Identify a range and set the color for it. Ma poi come ho menzionato sopra, se l'utente naviga su una gamma diversa, la nuova impostazione del colore non si applicherà lì.

  2. Set it for the entire document. Se lo imposta per l'intero documento, il colore dell'intero documento cambierà e sono sicuro che non è quello che desideri.

Altri suggerimenti

Possibili basi di soluzione alternativa Application.WindowSelectionChange Event. Pertanto è necessario conservare i seguenti passaggi:

1. Creare Modulo di classe
2.Name il tuo modulo di classe App
3. Aggiungere il seguente codice 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.In Modulo standard Aggiungi variabile pubblica:

    Public tmpApp As New App

5. Crea sottomarino nel modulo standard o aggiungi codice al tuo Document_Open Event, che inizializzerà la nostra 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 il documento sub una volta o aperto se il codice è stato aggiunto Document_open event.

---MODIFICARE--- (Dopo alcuni commenti da @SID di seguito)

Ci sono alcuni inconvenienti nell'uso della soluzione proposta. Tuttavia, la maggior parte di essi potrebbe essere risolta aggiungendo alcuni If statements dentro WindowSelectionChange event. Controllare la posizione di Sel range Il parametro, il testo intorno e gli altri consentono di decidere con precisione se il nuovo colore debba essere applicato o meno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top