L’abbonato Doris Bell ha chiesto se esisteva un modo, in Word 2000, per individuare tutte le modifiche apportate da un particolare editor in un documento in cui è attivato Revisioni. La risposta rapida, ovviamente, sarebbe l’aggiornamento a Word 2002, poiché questa funzionalità è disponibile direttamente dalla barra degli strumenti Revisione.

Word 97 e Word 2000, tuttavia, sono una storia diversa: qui hai solo la possibilità di visualizzare o non visualizzare tutte le modifiche rilevate. Se lo desideri, puoi ovviare alla carenza creando macro che ti consentano di cercare le modifiche da un editor specifico. Inizia creando un modulo utente nell’editor VBA, seguendo questi passaggi generali:

  1. Visualizza l’editor VBA premendo Alt + F11.

  2. Scegli UserForm dal menu Inserisci. Nell’editor viene visualizzato un modulo utente vuoto.

  3. Utilizzando la Casella degli strumenti, posizionare un controllo Etichetta nel modulo, vicino al lato sinistro del modulo.

  4. Nelle Proprietà per il controllo Etichetta appena posizionato, modificare la proprietà Caption in “Autore” (senza virgolette).

  5. Utilizzando la casella degli strumenti, posizionare un controllo ComboBox appena a destra dell’etichetta inserita nel passaggio 3.

  6. Nelle proprietà per il controllo ComboBox, modificare la proprietà Name in “cboAuthor” (senza virgolette).

  7. Utilizzando la casella degli strumenti, posizionare un controllo CommandButton nel form. Può essere lungo il bordo inferiore del modulo o sul bordo destro; Spetta a voi.

  8. Nelle Proprietà per il controllo CommandButton, modificare la proprietà Name in “cmdFindNext” (senza virgolette).

  9. Nelle Proprietà per il controllo CommandButton, modificare la proprietà Caption su “Trova” (senza virgolette).

  10. Utilizzando la casella degli strumenti, inserire un altro controllo CommandButton nel form.

Ciò dovrebbe essere appena a destra dell’altro controllo CommandButton o appena sotto esso.

  1. Nelle Proprietà per il controllo CommandButton, modificare la proprietà Name in “cmdExit” (senza virgolette).

  2. Nelle Proprietà per il controllo CommandButton, modificare la proprietà Caption a “Exit” (senza virgolette).

  3. Ridimensiona il tuo modulo generale per l’aspetto desiderato.

Il tuo modulo è ora completo e tutto ciò che devi fare è aggiungere il codice di programmazione che sfrutterà questi controlli. Assicurati di selezionare l’intero modulo e quindi premere F7 per visualizzare la finestra del codice. Se è già presente del codice (VBA potrebbe fornire un codice predefinito per te), sentiti libero di eliminarlo. Quindi, inserisci il seguente codice nella finestra del codice:

Private Sub UserForm1_Initialize()

Dim oRevision As Revision     Dim bExists As Boolean

bExists = False

' Go to beginning of document     Selection.HomeKey Unit:=wdStory

' Loop through revisions and add authors     For Each oRevision In ActiveDocument.Revisions         If Me.cboAuthor.ListCount > 0 Then             For i = 1 To Me.cboAuthor.ListCount                 If Me.cboAuthor.List(i - 1) = oRevision.Author Then                     bExists = True                 End If             Next i

' If it doesn't already exist, add the author to list             If Not bExists Then                 Me.cboAuthor.AddItem oRevision.Author             End If

bExists = False         Else             ' Add first Author to the list             Me.cboAuthor.AddItem oRevision.Author         End If     Next oRevision End Sub

Private Sub cmdExit_Click()

Unload Me End Sub

Private Sub cmdFindNext_Click()



Dim iStart As Integer     Dim iEnd As Integer     Dim myRange As Range     Dim iRevisions As Integer     Dim iResponse As Integer     Dim bAuthorFound As Boolean

' Collapse the Selection so that we don't include selected text     Selection.Collapse wdCollapseEnd     Selection.MoveRight wdCharacter, 2

' Get the Range start and end positions     iStart = Selection.Range.Start     iEnd = ActiveDocument.Content.End     Set myRange = ActiveDocument.Range(Start:=iStart, End:=iEnd)



' Count total number of revisions within range     iRevisions = myRange.Revisions.Count

If iRevisions > 0 Then         ' Loop through all revisions in the range          ' selecting first one found         For i = 1 To iRevisions             If myRange.Revisions(i).Author = Me.cboAuthor.Text Then                 myRange.Revisions(i).Range.Select                 bAuthorFound = True                 Exit For             Else                 bAuthorFound = False             End If         Next i     End If

If Not bAuthorFound Then         ' Ask if they would like to start from the beginning         iResponse = MsgBox("Search from beginning?", vbYesNo, "Find Author")

If iResponse = vbYes Then             ' Go to top of document             Selection.HomeKey Unit:=wdStory             cmdFindNext_Click         Else             ' Exit             Unload Me         End If     End If End Sub

Quando in seguito esegui il tuo nuovo modulo utente, ti viene presentato un modo per selezionare gli editor e trovare la modifica successiva effettuata da quell’editor. Ciò consente di trovare una modifica alla volta, non di visualizzare tutte le modifiche di un particolare editor (come è possibile in Word 2002).

C’è un approccio diverso che puoi adottare. È possibile utilizzare una macro per “estrarre” tutte le modifiche effettuate in un documento e disporle per editor in un nuovo documento. La seguente macro mostra come puoi fare questo genere di cose. La tabella risultante indica anche il tipo di modifica eseguita nel documento originale.

Option Explicit

Private Sub ShowAuthorAndRevisions()

Dim sRevision As String     Dim oRev As Revision     Dim oDoc As Document     Dim oRng As Range

For Each oRev In ActiveDocument.Revisions         With oRev             sRevision = sRevision & .Author & vbTab _               & .Type & vbTab & .Range.Text & vbCrLf         End With     Next oRev

' Open a new document     Set oDoc = Documents.Add     With oDoc         .Range.InsertAfter sRevision         ' Convert the revisions to a table         .Range.ConvertToTable Separator:=wdSeparateByTabs         With .Tables(1)

' Sort the table by the author (i.e., the first column)

.Range.Sort             ' Add a new row to the beginning of the table             .Range.Rows.Add BeforeRow:=.Range.Rows(1)

With .Rows(1)

' insert column descriptions                 .Cells(1).Range.Text = "Author"

.Cells(2).Range.Text = "Revision Type"

.Cells(3).Range.Text = "Revision"

End With         End With         ' insert a paragraph mark above the table         Selection.SplitTable         ' Insert a legend to make reading the revision type easier         .Range.InsertBefore "Revision Type Legend:" & vbCrLf & _             "No Revision = 0 " & vbCrLf & _             "Revision Insert = 1 " & vbCrLf & _             "Revision Delete = 2 " & vbCrLf & _             "Revision Property = 3 " & vbCrLf & _             "Revision Paragraph Number = 4 " & vbCrLf & _             "Revision Display Field = 5 " & vbCrLf & _             "Revision Reconcile = 6 " & vbCrLf & _             "Revision Conflict = 7 " & vbCrLf & _             "Revision Style = 8 " & vbCrLf & _             "Revision Replace = 9 " & vbCrLf     End With End Sub

Per ogni revisione in un documento, questa macro troverà l’autore, il tipo e il testo della revisione (se presente). La macro posizionerà quindi tutte le revisioni in una tabella, ordinerà la tabella in base al nome dell’autore e inserirà una piccola legenda che descrive ogni tipo di revisione.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti WordTips), ho preparato una pagina speciale che include informazioni utili.

WordTips è la tua fonte di formazione economica su Microsoft Word.

(Microsoft Word è il software di elaborazione testi più popolare al mondo.) Questo suggerimento (1303) si applica a Microsoft Word 97, 2000 e 2002.