![]() |
|
|
Thread Tools | Display Modes |
#2
|
||||
|
||||
![]()
Roy
If you are doing a search for 'Table #' and the document is correctly created, there will be multiple instances that your macro might find, all of which will needed to be handled/ignored by your code. Table Captions, when done correctly are composed of two parts. The text "Table " followed by a Seq field with the series name 'Table" such that the field code starts with {Seq Table ...} Cross references to a table caption are usually a Ref field with the name of a bookmark so the field looks something like {Ref _Ref86060324 \h} where the _Ref# is automatically 'randomly' generated when you use the Insert Cross Reference dialog. List of Tables is also another instance where you would expect to see lots of Table #'s appear but you most likely will ignore these completely. The following code is pulling all instances into the workbook. You would probably want to expand on this code to exclude the hits you don't want. Code:
Sub findRef() Dim wdApp As Object, wdDoc As Object, aRng As Object, strFile As String Dim aSheet As Worksheet, iRow As Integer Set aSheet = ThisWorkbook.ActiveSheet aSheet.Range("A1:D1") = Split("Doc,Page,Text,FieldCode", ",") iRow = 1 With Application.FileDialog(msoFileDialogOpen) If .Show = -1 Then strFile = .SelectedItems(1) End If End With If strFile = "" Then Exit Sub On Error Resume Next Set wdApp = GetObject(, "Word.Application") If Err.Number <> 0 Then Set wdApp = CreateObject("Word.Application") wdApp.Visible = False Set wdDoc = wdApp.Documents.Open(Filename:=strFile, AddToRecentFiles:=False, Visible:=False) Set aRng = wdDoc.Range With aRng.Find .ClearFormatting .Text = "Table?[0-9]{1,3}" .MatchWildcards = True .MatchCase = False Do While .Execute ' Loop until Word can no longer find the search string iRow = iRow + 1 aSheet.Range("A" & iRow) = strFile aSheet.Range("B" & iRow) = aRng.Information(3) 'wdActiveEndPageNumber = 3 aSheet.Range("C" & iRow) = aRng.Text aRng.MoveStart Unit:=1, Count:=-1 'wdCharacter = 1 aRng.MoveEnd Unit:=1, Count:=1 If aRng.Fields.Count > 0 Then aSheet.Range("D" & iRow) = aRng.Fields(1).Code.Text Else aSheet.Range("D" & iRow) = "No field" End If '' aRng.Collapse Direction:=0 'wdCollapseEnd Loop End With wdDoc.Close False Set aRng = Nothing Set wdDoc = Nothing wdApp.Visible = True wdApp.Quit Set wdApp = Nothing End Sub
__________________
Andrew Lockton Chrysalis Design, Melbourne Australia |
Tags |
microsoft word |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
![]() |
mgdawn672017 | Word | 3 | 09-17-2018 03:05 PM |
![]() |
Toto | Word | 1 | 06-07-2014 03:51 PM |
cross reference hyperlinks to text box | nothing_kills | Word | 4 | 11-25-2013 09:21 AM |
![]() |
wmac | Word | 1 | 05-14-2013 08:54 PM |
Cross-reference feature problems in Word 2010 | bannisa | Word | 0 | 02-13-2011 03:28 AM |