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

时间:2017-11-29 21:08:42

标签: vba ms-word ms-office word-vba

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

即,我希望能够使用“Tab”字符缩进/取消多行代码。在任何纯文本编辑器或IDE中,此任务都非常简单,但为了清楚起见,我将在此处进行说明。标签显示为黑色箭头:

enter image description here

  1. 初始状态
  2. 使用Shift键或鼠标,我选择了JavaScript函数的一部分
  3. 然后我按下键盘上的Tab键
  4. 通过在每一行插入制表符来缩进所选行。
  5. 如何使用VBA完成?

    由于我没有发布任何代码(作为我自己的努力的证据),我不希望得到完全有效的东西。但至少,我希望能够理解它是如何做到的。

    正如大卫所说,我录了一个宏。在这里看起来如何:

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

    问题是,我不明白如何让它适用于多行。如果我选择它们,这个宏(对我来说并不奇怪)只需插入“Tab”而不是选择。

    enter image description here

2 个答案:

答案 0 :(得分:2)

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

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

(这假定您的每个代码"行"是一个新的"段落"在Word中,如果您打算将其复制/粘贴到/从实际代码。)

答案 1 :(得分:1)

如果宏名为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