Home > OS >  Removing a string it not followed by a table using a VBA macro in word
Removing a string it not followed by a table using a VBA macro in word

Time:12-07

I'm facing a challenging request I need to solve using a VBA Macro in Word.

The document is a template that will grab some data in a DB upon generation. It contains multiple tables but I don't know how many and how many data will be in each table.

It looks like this:

Sample initial state

The requirement is to be able to detect the strings that are not followed by a table and delete them. Said differently when a string is followed by the table, it's all good. When a string is followed by another string, it should be deleted.

The different strings are known, I'm guessing this would help.

After the macro run, my previous sample should look like this:

Sample expected result

I know it looks bit harsh but I don't even know where to start :(

I've looked at macro searching for a text but I wasn't able to find something like IF stringA is followed by a table then do nothing if not then delete.

Any help of the community would be very much appreciated!

Thanks Julien

CodePudding user response:

This should get you started:

Sub FindAndDelete()
    Dim rng As Range
    Set rng = ActiveDocument.Content
    With rng
        With .Find
            .ClearFormatting
            .Text = "Text to find"
        End With
        Do While .Find.Execute
            If .Next(wdParagraph).Tables.Count = 0 Then
                .Next(wdParagraph).Delete
            End If
        Loop
    End With
End Sub

CodePudding user response:

Thank you so much!

I was able to make it work by slightly modifying it as the proposed code was deleting the string followed by the table:

    Dim rng As Range
    Set rng = ActiveDocument.Content
    With rng
        With .Find
            .ClearFormatting
            .Text = "This is my table C"
        End With
        Do While .Find.Execute
            If .Next(wdParagraph).Tables.Count = 0 Then
                .Delete
            End If
        Loop
    End With

my last step is to make the macro run only for a specific part of the document. I guess I need to work on the range. I'll give a try and post the result here. Again thank you for helping pure newbies!

  • Related