[Last Call] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 160
  • Last Modified:

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

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
AndreasHermle
Asked:
AndreasHermle
  • 2
2 Solutions
 
GrahamSkanCommented:
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
 
Rgonzo1971Commented:
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
 
GrahamSkanCommented:
Thanks Rafael. I can't think why that didn't come out in my testing.
0
 
AndreasHermleAuthor Commented:
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

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

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