PDA

View Full Version : [SOLVED:] How to amend Macro to consider all table columns instead of just the first



USER8888
08-06-2022, 12:15 PM
I'm trying to set up a macro in Microsoft Word (Windows 10) that will delete any row of a table containing the word "INTERNAL".

I found some code online that I've tweaked a little and manage to get working when I run the macro, but only if the word "INTERNAL" is in the first column:



Sub DIR()
' DeleteRowswithSpecificValue Macro
Sub DeleteRows()
Dim TargetText As String
Dim oRow As Row
If Selection.Information(wdWithInTable) = False Then Exit Sub
TargetText = "INTERNAL"
For Each oRow In Selection.Tables(1).Rows
If oRow.Cells(1).Range.Text = TargetText & vbCr & Chr(7) Then oRow.Delete
Next oRow
End Sub

How do I amend the above so that it either checks all columns, or alternatively, so that I can define which column it is checking (in this instance, it's only column 4 of the table that I'm actually interested in)?

I've tried changing each of the (1)s mentioned to (4)s, but that only causes errors instead.
I'm completely new to using VBA, so any help would be greatly appreciated.

Thank you.

Paul_Hossler
08-06-2022, 01:26 PM
Just a quick guess



If oRow.Cells(4).Range.Text = TargetText & vbCr & Chr(7) Then oRow.Delete

But I'd start deleting bottoms to top



Sub DeleteRows()
Dim TargetText As String
Dim oRow As Row
Dim i as Long
If Selection.Information(wdWithInTable) = False Then Exit Sub
TargetText = "INTERNAL"
With Selection.Tables(1)
For i = Rows.Count to 1 Step -1
With .Rows(i)
If .Cells(4).Range.Text = TargetText & vbCr & Chr(7) Then .Delete
End with
Next i
End With
End Sub

USER8888
08-06-2022, 01:40 PM
Just a quick guess



If oRow.Cells(4).Range.Text = TargetText & vbCr & Chr(7) Then oRow.Delete


I've tried changing the Cells(1) to Cells(4) but I get the error message:

"Run-time error '5941':

The requested member of the collection does not exist."


It seemed like the logical choice to me too, but no luck. Thanks for the suggestion though.

USER8888
08-06-2022, 01:58 PM
But I'd start deleting bottoms to top



Sub DeleteRows()
Dim TargetText As String
Dim oRow As Row
Dim i as Long
If Selection.Information(wdWithInTable) = False Then Exit Sub
TargetText = "INTERNAL"
With Selection.Tables(1)
For i = Rows.Count to 1 Step -1With .Rows(i)
If .Cells(4).Range.Text = TargetText & vbCr & Chr(7) Then .Delete
End with
Next i
End With
End Sub

I tried this code instead. It's come back with:

"Compile error: Syntax error" and appears to be highlighting the line: "Sub DeleteRows()"

I've checked the macro is named 'DeleteRows' to match. I'm not sure what else to try.

Thanks.

Edit: I think it's the line:



For i = Rows.Count to 1 Step -1With .Rows(i)


Causing the Syntax error.

macropod
08-07-2022, 10:42 PM
Missing line break in original code corrected.