Solved

Detect invalid cross-references using VBA

Posted on 2013-11-06
10
926 Views
Last Modified: 2013-11-11
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
Comment
Question by:AndreasHermle
  • 7
  • 3
10 Comments
 
LVL 48

Accepted Solution

by:
Rgonzo1971 earned 500 total points
ID: 39626733
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
 

Author Comment

by:AndreasHermle
ID: 39626974
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
 

Author Comment

by:AndreasHermle
ID: 39627007
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
 
LVL 48

Expert Comment

by:Rgonzo1971
ID: 39627069
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
 

Author Comment

by:AndreasHermle
ID: 39627325
Ok, I'll give it a try and let you know then.

Regards, Andreas
0
What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 

Author Comment

by:AndreasHermle
ID: 39629682
Ok, this sped it up considerably. Thank you very much. Now comes the points awarding.

Regards, Andreas
0
 

Author Closing Comment

by:AndreasHermle
ID: 39629685
Thank you very much for your professional support. Regards, Andreas
0
 
LVL 48

Expert Comment

by:Rgonzo1971
ID: 39630000
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
 

Author Comment

by:AndreasHermle
ID: 39634852
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
 

Author Comment

by:AndreasHermle
ID: 39638251
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

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

The Selection object is designed for user interaction. It has a Range property, so it can be used in most places that a Range object can. Recorded macros must use the Selection because they are simply copying what the user is doing. A Range prope…
Using Word 2013, I was experiencing some incredible lag when typing.  Here's what worked for me....
Learn how to make your own table of contents in Microsoft Word using paragraph styles and the automatic table of contents tool. We'll be using the paragraph styles in Word’s Home toolbar to help you create a table of contents. Type out your initial …
Learn how to create and modify your own paragraph styles in Microsoft Word. This can be helpful when wanting to make consistently referenced styles throughout a document or template.

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now