Solved

Retrieve the index number of specific tables and display them in a msgbox

Posted on 2014-04-29
4
144 Views
Last Modified: 2014-05-01
Dear Experts:

Below macro searches for the string 'Single Products' in the active Document. If this string is located in a table, the macro will come up with a msgbox telling the user that the string has been found.

Could somebody please tweak this macro so that all the index numbers of the tables where the string has been found are listed in a msgbox, e.g.
"The string 'Single Products' has been found in tables (1), (3), (5)."

Help is much appreciated. Thank you very much in advance for your valuable help.

Regards, Andreas


Sub Search_Table()
Dim ht As Single
Dim strLen As Integer
Dim rng As Range
Dim strFind As String

'The index number of the tables that have the string 'Single Products' have to be listed in a MsgBox at the End


    strFind = "Single Products"
    strLen = Len(strFind)

    Set rng = ActiveDocument.Range
     

    With rng
        .Find.ClearFormatting
        With .Find
            .Text = strFind
            .Execute
        End With
        
Do
            If .Find.Found Then
                If rng.Information(wdWithInTable) Then
                MsgBox "String has been found"
                End If
            End If
            
           If Not .Find.Found Then
                MsgBox "String has not been found"
                End If
            rng.MoveStart strLen
            .Find.Execute
        Loop Until Not (.Find.Found)
 End With
    
    

End Sub

Open in new window

0
Comment
Question by:AndreasHermle
  • 2
4 Comments
 
LVL 76

Accepted Solution

by:
GrahamSkan earned 350 total points
ID: 40029634
Hi Andreas,
The table object doesn't have an index property, so it would be best to search each table, keeping track of its index as we go along.
Sub Search_Tables()
    Dim tbl As Table
    Dim strFind As String
    Dim ixTables() As Integer
    Dim ix As Integer
    Dim t As Integer
    Dim strMessage As String
    
    'The index number of the tables that have the string 'Single Products' have to be listed in a MsgBox at the End
    strFind = "Single Products"
    
    For Each tbl In ActiveDocument.Tables
        t = t + 1
        If tbl.Range.Find.Execute(strFind) Then
            ReDim ixTables(ix)
            ixTables(ix) = t
            ix = ix + 1
        End If
    Next tbl
    
    If ix > 0 Then
        strMessage = "String has been found in table" & IIf(ix = 1, "", "s") & ": "
        For t = 0 To ix - 2
            strMessage = strMessage & "(" & ixTables(t) & "), "
        Next t
        strMessage = strMessage & "(" & ixTables(t) & ")."
    Else
         strMessage = "String has not been found"
    End If
        
    MsgBox strMessage

End Sub

Open in new window

0
 
LVL 48

Assisted Solution

by:Rgonzo1971
Rgonzo1971 earned 150 total points
ID: 40029986
Hi,

Corrected code: Redim Preserve at line 15
Sub Search_Tables()
    Dim tbl As Table
    Dim strFind As String
    Dim ixTables() As Integer
    Dim ix As Integer
    Dim t As Integer
    Dim strMessage As String
    
    'The index number of the tables that have the string 'Single Products' have to be listed in a MsgBox at the End
    strFind = "Single Products"
    
    For Each tbl In ActiveDocument.Tables
        t = t + 1
        If tbl.Range.Find.Execute(strFind) Then
            ReDim Preserve ixTables(ix)
            ixTables(ix) = t
            ix = ix + 1
        End If
    Next tbl
    
    If ix > 0 Then
        strMessage = "String has been found in table" & IIf(ix = 1, "", "s") & ": "
        For t = 0 To ix - 2
            strMessage = strMessage & "(" & ixTables(t) & "), "
        Next t
        strMessage = strMessage & "(" & ixTables(t) & ")."
    Else
         strMessage = "String has not been found"
    End If
        
    MsgBox strMessage

End Sub

Open in new window

Regards
0
 
LVL 76

Expert Comment

by:GrahamSkan
ID: 40029995
Thanks Rafael. I can't think why that didn't come out in my testing.
0
 

Author Closing Comment

by:AndreasHermle
ID: 40034322
Wow, I am impressed. How come that you both know all this? Of course it is partly experience and lots of coding jobs but there is also this gene that all you programmers have and the rest of us not.

Thank you very much for your great help. Regards, Andreas
0

Featured Post

Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

Join & Write a Comment

I would like to show you some basics you can do with Mailings in MS Word. It´s quite handy feature you can use for creating envelopes, labels, personalized letters etc. First question could be what is this feature good for? Mailing can really he…
Shortcuts in Word Just the other day I had a training for Microsoft and they wanted me to show how well the new Windows and Office behaved on a touch device, which by the way is great, but it was only then that I realized that using keyboard shortc…
In this video, we show how to convert an image-only PDF file into a PDF Searchable Image file, that is, a file with both the image (typically from scanning) and text, which is created in an automated fashion with Optical Character Recognition (OCR) …
This Micro Tutorial well show you how to find and replace special characters in Microsoft Word. This is similar to carriage returns to convert columns of values from Microsoft Excel into comma separated lists.

705 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

16 Experts available now in Live!

Get 1:1 Help Now