![]() |
|
|||||||
|
|
|
Thread Tools | Display Modes |
|
#1
|
|||
|
|||
|
Hello,
I am trying to create an application, which verifies if an in-text table (or figure, equation) reference was created using Microsoft Word's "cross reference" feature. For example, in a Word document, if there was a sentence that stated, "Please see Table 1 for further details," I want the application to verify that the author used Word's insert cross-reference feature and didn't just simply type "Table 1." Basically, is there a field code associated with "Table 1?" Finding all of the "Table" occurrences is easy enough. However, I cannot figure out how to determine if they are associated with a table using Word's cross-reference feature. I have started my code in Excel, because I eventually want to create a spreadsheet of all of the occurrences, once I figure out the other part. Here is my code so far. Any help would be appreciated! Thanks, Roy Code:
Sub findRef()
'
Dim wdApp As Object
Dim wdDoc As Object
Dim aRng As Object
Dim strFile As String
With Application.FileDialog(msoFileDialogOpen)
If .Show = -1 Then
strFile = .SelectedItems(1)
End If
End With
If strFile = "" Then
Exit Sub
End If
On Error Resume Next
Set wdApp = GetObject(, "Word.Application")
If Err.Number <> 0 Then
Set wdApp = CreateObject("Word.Application")
wdApp.Visible = False
End If
Set wdDoc = wdApp.Documents.Open(Filename:=strFile, AddToRecentFiles:=False, Visible:=False)
Set aRng = wdDoc.Range
With aRng.Find
.ClearFormatting
.Text = "Table?[0-9]"
.MatchWildcards = True
Do While .Execute ' Loop until Word can no longer find the search string
'if aRng.text = cross reference field code ...
Loop
End With
wdDoc.Close False
Set aRng = Nothing
Set wdDoc = Nothing
wdApp.Quit
Set wdApp = Nothing
End Sub
Last edited by scienceguy; 10-23-2021 at 07:09 AM. |
|
#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 |
|
#3
|
|||
|
|||
|
Thanks, Andrew! You are awesome!!
|
|
| Tags |
| microsoft word |
| Thread Tools | |
| Display Modes | |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
Cross Reference Text
|
mgdawn672017 | Word | 3 | 09-17-2018 03:05 PM |
extra space when I cross-reference a table or figure
|
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 |
Reference number and cross reference for equation numbers to match the thesis format
|
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 |