以与纯文本编辑器相同的方式缩进多行

Indent multiple lines the same way as plain text editor

有时我的 Word 文档中有代码块,我想在不复制到纯文本编辑器的情况下使用它们。

即,我希望能够使用 "Tab" 个字符 indent/unindent 多行代码。此任务在任何纯文本编辑器或 IDE 中都非常简单,但为了清楚起见,我将在此处显示。选项卡显示为黑色箭头:

  1. 初始状态
  2. 使用 Shift 键或鼠标,我 select编辑了 JavaScript 函数的一部分
  3. 然后我按了键盘上的 Tab 键
  4. 通过在每行中插入制表符缩进选定的行。

如何用 VBA 完成?

因为我没有 post 任何代码(作为我自己努力的证据),所以我不希望得到完全有效的东西。但至少,我希望得到理解 "how" 它可以做到。


按照大卫的建议,我录制了一个宏。外观如下:

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

问题是,我不明白如何让它适用于多行。如果我 select 他们,这个宏(这对我来说并不奇怪)只是插入 "Tab" 而不是 selection.

在选择的每个段落的开头插入一个制表符:

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

(假设您的每个代码 "lines" 都是 Word 中的新 "paragraph",如果您打算 copy/paste 这个 to/from实际代码。)

如果宏被命名为 IncreaseIndentDecreaseIndent,它们可以 运行 使用主页选项卡上的增加和减少缩进按钮。

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

引用https://wordmvp.com/FAQs/MacrosVBA/InterceptSavePrint.htm