john c. j.
john c. j.

Reputation: 1185

Indent multiple lines the same way as plain text editor

Sometimes I have code blocks in my Word documents, and I want to work with them without copying to plain text editor.

Namely, I want to have an ability to indent/unindent multiple lines of code using "Tab" character. This task is very simple in any plain text editor or IDE, but for the sake of clarity, I will show it here. Tabs are shown as black arrows:

enter image description here

  1. Initial state
  2. Using the Shift key or mouse, I selected a part of JavaScript function
  3. Then I pressed Tab key on my keyboard
  4. Selected lines were indented by inserting tab character on each line.

How it could be done with VBA?

Since I don't post any code (as evidence of my own efforts), I don't expect to get something completely working. But at least, I hope to get an understanding "how" it could be done.


As David suggested, I recorded a macro. Here how it looks:

Sub Indentator()
    Selection.TypeText Text:=vbTab
End Sub

The problem is, that I don't understand how to get it work for multiple lines. If I select them, this macro (and it was not surprise for me) just inserts "Tab" instead of selection.

enter image description here

Upvotes: 1

Views: 3129

Answers (2)

Slai
Slai

Reputation: 22876

If the macros are named IncreaseIndent and DecreaseIndent, they can be run using the Increase and Decrease Indent buttons on the Home tab.

Sub IncreaseIndent()
    If Selection.Start = Selection.End Then
        Selection.InsertBefore vbTab
        Selection.Start = Selection.End
    Else
        Dim p As Paragraph
        For Each p In Selection.Paragraphs
            p.Range.InsertBefore vbTab
        Next
    End If
End Sub

Sub DecreaseIndent()
    If Selection.Start = Selection.Paragraphs(1).Range.Start Then
        Selection.Start = Selection.Start + 1
    End If
    Dim p As Paragraph, c As Range
    For Each p In Selection.Paragraphs
        Set c = p.Range.Characters(1)
        If c.Text = vbTab Then c.Delete
    Next
End Sub

Reference https://wordmvp.com/FAQs/MacrosVBA/InterceptSavePrint.htm

Upvotes: 1

YowE3K
YowE3K

Reputation: 23974

Insert a tab character at the start of each paragraph in the selection:

Sub Indentator()
    Dim para As Paragraph
    For Each para In Selection.Paragraphs
        para.Range.InsertBefore vbTab
    Next
End Sub

(This assumes that each of your code "lines" is a new "paragraph" in Word, which it usually would be if you are intending to copy/paste this to/from actual code.)

Upvotes: 2

Related Questions