Vba 向上/向下移动段落(不复制/粘贴)

Vba 向上/向下移动段落(不复制/粘贴),vba,ms-word,Vba,Ms Word,在word中,我正在寻找一条键盘捷径,允许我将光标当前所在的段落向上或向下移动一段/行 我是VBA等的新手,但发现了这个 Sub OutlineMoveUp() Selection.Range.Relocate wdRelocateUp End Sub 这与我想要的非常接近,但似乎根据段落在大纲结构中的位置将其上移(可能会变得相当混乱)。我只想将它上移或下移一段/行(也不考虑其格式) (RStudio提供了这个很好的功能,您可以简单地移动选定的文本行而无需复制粘贴;我正在寻找word中

在word中,我正在寻找一条键盘捷径,允许我将光标当前所在的段落向上或向下移动一段/行

我是VBA等的新手,但发现了这个

Sub OutlineMoveUp()
    Selection.Range.Relocate wdRelocateUp
End Sub
这与我想要的非常接近,但似乎根据段落在大纲结构中的位置将其上移(可能会变得相当混乱)。我只想将它上移或下移一段/行(也不考虑其格式)

(RStudio提供了这个很好的功能,您可以简单地移动选定的文本行而无需复制粘贴;我正在寻找word中的等效功能)


许多thx。

重新定位方法设计为在大纲模式下工作。请改用
Move
方法:

Selection.Range.Move Unit:=wdParagraph, Count:=-1

您可能需要调整计数以获得所需的效果——如果-1不起作用,请尝试-2,以此类推。

使用剪切/粘贴可能会更干净,但请尝试以下方法:

Sub Test_NewP()
    Dim doc As Word.Document
    Dim CurR As Word.Range
    Dim NewP As Word.Paragraph
    Dim IndexP As Long

    Set doc = ActiveDocument
    If doc.ActiveWindow.View = wdOutlineView Then
        MsgBox "This program doesn't work in outline view --- please switch to another view", vbOKOnly, "Error"
        Exit Sub
    End If

    Set CurR = Selection.Paragraphs(1).Range
    IndexP = doc.Range(0, CurR.End).Paragraphs.Count
    Set NewP = doc.Paragraphs.Add(doc.Paragraphs(IndexP - 1).Range)
    NewP.Range.Text = CurR.Text
    CurR.Delete

    Set NewP = Nothing
    Set CurR = Nothing
    Set doc = Nothing
End Sub
这可能无法可靠地管理格式,但您可以添加代码来解决这一问题


希望能有所帮助。

非常感谢。但不幸的是,这个命令没有任何影响。光标不移动,更不用说活动段落/行了。为了澄清,是否要在不移动任何文本的情况下移动光标?如果我不清楚,请抱歉。我想移动光标当前所在的段落。在许多情况下,“Selection.Range.Relocate wdRelocateUp”就是这样做的,但在有些情况下,“活动”段落并不是只上下移动一行,而是明显地在文档结构中移动了整个级别(尽管我还没有完全理解其背后的模式)。我想知道这是否取决于活动段落的格式。如果活动段落(例如)是列表/枚举的一部分,则移动整个列表区域(但我只想移动光标所在的行/段落)。