Obtendo as entradas de índice de um documento do Word no VBA

2

Eu tenho uma coleção de arquivos do Word docx em várias subpastas. Eu preciso criar um arquivo de índice com links de volta para os arquivos originais. Eu pensei que o VBA poderia ser a maneira mais fácil de fazer isso. Posso encontrar uma impressão de uma lista de todos os arquivos em minhas subpastas, mas não consigo acessar os campos de entrada do índice.

Meu primeiro objetivo foi obter uma lista de todos os arquivos que preciso examinar. Eu adaptei o código do link para obter os caminhos dos arquivos.

Meu segundo objetivo é examinar cada arquivo e obter os campos de entrada do índice (a tesoura {XE ": correndo com"} em meus documentos.

E isso é onde eu estou preso. Eu posso construir uma string para o nome do caminho completo de cada arquivo. Como leio o arquivo e obtenho essas entradas de índice?

    
por Josh at Merchant Concepts 01.04.2014 / 20:52

1 resposta

2

Você poderia fazer isso usando algo nas seguintes linhas (eu não testei esse código exato, por isso espere erros)

Sub openAndProcess1Document( FullName As String, target As Word.Document )
' FullName is the full path+file name of the .docx
' target is a reference to the document that was the
' ActiveDcoument before you call this routine
' Or you could set up a Range variable and pass that
' So loop through your list of fullnames, calling this Sub
Dim doc as Word.Document
Dim fld as Word.Field
Dim r as Word.Range
Dim strCode as String

Set doc = Documents.Open(FullName)
For each fld in doc.Fields
  if fld.Type = wdFieldIndexEntry then ' It's an XE field
    strCode = fld.Code ' this will look something like 'XE "scissors:running with"'
    ' do whatever you want with strCode here,
    ' e.g. 
    ' Set r = target.Content
    ' r.Collapse wdCollapseEnd
    ' r.InsertParagraph
    ' r.InsertAfter strCode
    ' Set r = Nothing
  end if
Next

doc.Close Savechanges:=wdDoNotSaveChanges
Set doc = Nothing
End Sub 

Então você precisa de algo como

Dim target as Word.Document ' doesn't have to be called "target"! 
Set target = ActiveDocument
For i = 1 to intDocumentCount ' or some such
  Call openAndProcessDocument(strArrayOfDocumentFullNames(i), target)
Next ' i
' optionally...
target.Activate
    
por 01.04.2014 / 22:09