Word belgesinin dizin girişlerini VBA'da alma


2

Çeşitli alt klasörlerde Word docx dosyaları koleksiyonum var. Orijinal dosyalara geri bağlantı içeren bir dizin dosyası oluşturmam gerekiyor. VBA'nın bunu yapmanın en kolay yolu olabileceğini düşündüm. Alt klasörlerimdeki her dosyanın bir listesini bulabilirim, ancak dizin giriş alanlarına erişemiyorum.

İlk hedefim, incelemem gereken her dosyanın bir listesini çıkarmaktı. Ben kodu http://word.mvps.org/faqs/macrosvba/ReadFoldersIntoArray.htm dosya yollarını almak için.

İkinci hedefim, her dosyayı incelemek ve dizin giriş alanlarını ({XE "makas: çalışan"} ile belgelerimdeki öğeleri almak.)

Ve burada sıkışıp kaldım. Her dosyanın tam yol adına bir dize oluşturabilirim. Dosyayı nasıl okuyabilirim ve bu indeks girişlerini nasıl alabilirim?


İndeks derken, içindekiler tablosunu mu kastediyorsunuz?
Raystafarian

Hayır, orijinal belgelere giden köprülerle tamamlanmış özel bir dizin istiyorum, ancak bu baş ağrısını daha sonraya bırakıyorum.
Josh at Merchant Concepts

Yanıtlar:


2

Bunu aşağıdaki satırlar boyunca bir şeyler kullanarak yapabilirsiniz (Bu kodu tam olarak test etmedim, bu yüzden hataları bekleyin)

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 

O zaman gibi bir şeye ihtiyacın var

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

Teşekkürler. Bu yakın. Çökmez, ama henüz bir şey yapmaz. Word 2007'deyim (muhtemelen söylemeliydim). Göre msdn.microsoft.com/en-us/library/bb213727(v=office.12).aspx Sanırım wxFieldIndexEntry istiyorum, ancak bu da işe yaramıyor.
Josh at Merchant Concepts

Aha! Diğer testler bu belgelerin olduğunu gösterdi. Bu kod, dizin belgesine değil, yerel belgedeki alanlara ilişkin bilgileri ekliyordu. Dizinimi aktif olarak kaydettim ve buna yazabilirim.
Josh at Merchant Concepts

Evet, wdFieldIndexEntry. Düzeltdim ve mevcut ActiveDocument ile nasıl başa çıkılacağı konusunda bir öneride bulundum.

Tekrar teşekkürler. Şimdi bağlantıların bir listesi var. Sürecin bir sonraki adımını denemek için gidiyorum.
Josh at Merchant Concepts
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.