Forum Discussion

inarbeth's avatar
inarbeth
Copper Contributor
Jan 31, 2024

Macro to remove brackets

I wonder if any VBA experts can help. I found online the following macro to remove square brackets.

Sub RemoveSquareBrackets()
Dim oRng As Range
Set oRng = ActiveDocument.Range
With oRng.Find
.ClearFormatting
.Text = "\[*\]"
.MatchWildcards = True
While .Execute
With oRng
.Select
Select Case MsgBox("Do you want to remove brackets?", vbQuestion + vbYesNoCancel, "???")
Case Is = vbYes
.Characters.First.Delete
.Characters.Last.Delete
.Collapse wdCollapseEnd
Case Is = vbNo
.Collapse wdCollapseEnd
Case Else
Exit Sub
End Select
End With
Wend
End With
lbl_Exit:
Exit Sub
End Sub

I want a simpler macro that simply removes the first brackets to the left and right of the cursor (i.e. just one pair of brackets) and does not cycle through the document. If there are no brackets or only a single bracket then a pop up to give a warning.
Many thanks in advance.

  • inarbeth Use

     

    Dim oRng As Range
    Set oRng = Selection.Range
    With oRng
        .Start = ActiveDocument.Range.Start
        .Start = .Start + InStrRev(.Text, "(") - 1
        .End = ActiveDocument.Range.End
        .End = .Start + InStr(.Text, ")")
        .Characters(1).Delete
        .Characters(.Characters.Count).Delete
        .Select
    End With
    • inarbeth's avatar
      inarbeth
      Copper Contributor

      Doug_Robbins_Word_MVP Many thanks, Doug. It works very well with one issue. If there are no brackets left, it removes the first two characters in the document. Sorry for my ignorance but how do I insert a condition to Exit Sub if no bracket is found?

      • inarbeth Use

         

        Dim oRng As Range
        Set oRng = Selection.Range
        With oRng
            .Start = ActiveDocument.Range.Start
            .Start = .Start + InStrRev(.Text, "(") - 1
            .Characters(1).Delete
            .End = ActiveDocument.Range.End
            If InStr(.Text, ")") <> 0 Then
                .End = .Start + InStr(.Text, ")")
                .Characters(.Characters.Count).Delete
            End If
        End With

Resources