2

У меня есть коллекция файлов Word docx в различных подпапках. Мне нужно создать индексный файл со ссылками на исходные файлы. Я думал, что VBA может быть самым простым способом сделать это. Я могу найти распечатку списка каждого файла в моих подпапках, но не могу получить доступ к полям ввода индекса.

Моей первой целью было получить список всех файлов, которые мне нужно изучить. Я адаптировал код из http://word.mvps.org/faqs/macrosvba/ReadFoldersIntoArray.htm, чтобы получить пути к файлам.

Моя вторая цель - изучить каждый файл и получить поля ввода индекса ({XE "ножницы: работа с"} в моих документах).

И вот где я застрял. Я могу построить строку с полным именем пути каждого файла. Как мне прочитать файл и получить эти записи индекса?

1 ответ1

2

Вы можете сделать это, используя что-то вроде следующего (я не тестировал этот точный код, так что ожидайте ошибок)

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 

Тогда вам нужно что-то вроде

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .