• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1009
  • Last Modified:

Detect invalid cross-references using VBA

Dear Experts:

I wonder whether it is possible by means of VBA ...

... to validate a REF-Field, ie. whether the Reference Source exists or not (can be found or not).

In the current document ...
... I created a lot of cross-references that all point to bookmarked text.
... e.g. {REF bookmark_90 \h} or  {REF bookmark_91 \h}
... These cross-references are all listed in a (1) table

There are lots of bookmarks where the reference source could not be found, ie. cross-references that point to non-existing bookmarks.

Is it possible to run a macro that ...

... detects the row of the current table where the first error occurs and then
... sets a range till the end of the current table and ...
... deletes these rows (this range)

There are never any valid references in between, ie. if the first error ( Error: Reference Source could not be found!) occurs, it continues down to the last row.

This screenshot concisely explains my problem

Reference-Source-not-found.tif

Help is much appreciated. Thank you very much in advance.

Regards, Andreas
0
AndreasHermle
Asked:
AndreasHermle
  • 7
  • 3
1 Solution
 
Rgonzo1971Commented:
Hi,

pls try
Sub Macro()
'
For Each fld In ActiveDocument.Fields
    If Split(fld.Result.Text, " ")(0) = "Fehler!" Then
        fld.Result.Rows.Delete
    End If
Next
End Sub

Open in new window

Regards
0
 
AndreasHermleAuthor Commented:
Hi Rgonzo,

great this did the trick! Thank you very much for your swift and professional support.

There is one thing I still would like to address:

Is it possible to restrict this row deleting to ....
... just the currently selected table, which happens to be the first table in the document.

Regards, Andreas
0
 
AndreasHermleAuthor Commented:
Hi Rgonzo,

I came up with my own code, but as a matter of act I can detect no increase in speed.

I have many more fields in this document and below macro still seems to iterate thru all the fields in the whole document.


Sub Macro_2()

Dim fld As Field
Dim tbl As Table

For Each fld In ActiveDocument.Tables(1).Range.Fields

    If Split(fld.Result.Text, " ")(0) = "Fehler!" Then
        fld.Result.rows.Delete
    End If

Next
End Sub

Open in new window

0
New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

 
Rgonzo1971Commented:
Hi,

Your code could be quicker by inhibiting the screenupdating
Sub Macro_3()

Dim fld As Field
Dim tbl As Table
Application.ScreenUpdating = False
For Each fld In ActiveDocument.Tables(1).Range.Fields

    If Split(fld.Result.Text, " ")(0) = "Fehler!" Then
        fld.Result.Rows.Delete
    End If

Next
Application.ScreenUpdating = True
End Sub

Open in new window

0
 
AndreasHermleAuthor Commented:
Ok, I'll give it a try and let you know then.

Regards, Andreas
0
 
AndreasHermleAuthor Commented:
Ok, this sped it up considerably. Thank you very much. Now comes the points awarding.

Regards, Andreas
0
 
AndreasHermleAuthor Commented:
Thank you very much for your professional support. Regards, Andreas
0
 
Rgonzo1971Commented:
Hi,

As bonus here the code where it deletes from the first where it finds an error until the end of the table in one go

Sub Macro_4()

Dim fld As Field
Dim tbl As Table

For Each fld In ActiveDocument.Tables(1).Range.Fields
    If Split(fld.Result.Text, " ")(0) = "Fehler!" Then
        Idx = fld.Code.Cells(1).Row.Index
        EndOfTable = ActiveDocument.Tables(1).Rows.Count
        With ActiveDocument.Tables(1)
            Set rngRowsToBeDeleted = .Rows(Idx).Range
            rngRowsToBeDeleted.End = .Rows(EndOfTable).Range.End
        End With
        rngRowsToBeDeleted.Rows.Delete
        Exit For
    End If
Next
End Sub

Open in new window

Regards
0
 
AndreasHermleAuthor Commented:
Hi Rgonzo,

that's very nice of you. I will give it a try and let you know.

Thank you very much for your great, professional and swift help.

Regards, Andreas
0
 
AndreasHermleAuthor Commented:
Hi Rgonzo,

great, this works just fine and it is quicker to perform.

Thank you very much for your great and professional support.

Andreas
0

Featured Post

Prep for the ITIL® Foundation Certification Exam

December’s Course of the Month is now available! Enroll to learn ITIL® Foundation best practices for delivering IT services effectively and efficiently.

  • 7
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now