【问题标题】:moving paragraph up/down (without copy / paste)向上/向下移动段落(不复制/粘贴)
【发布时间】:2020-07-07 00:57:43
【问题描述】:

总之,我正在寻找一种键盘快捷方式,它允许我向上或向下移动光标当前为一个段落/行的段落。

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

Sub OutlineMoveUp()
    Selection.Range.Relocate wdRelocateUp
End Sub

这非常接近我正在寻找的内容,但似乎根据其在大纲结构中的位置将段落向上移动(这可能会变得相当混乱)。我只想将它向上或向下移动一个段落/行(也不管它的格式)。

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

很多谢谢。

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    Relocate 方法设计为在大纲模式see here 下工作。改用Move 方法:

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

    您可能需要调整 Count 以获得您想要的效果 --- 如果 -1 不起作用,请尝试 -2,等等。

    【讨论】:

    • 非常感谢。但不幸的是,该命令没有任何影响。光标不移动,更不用说活动的段落/行了。
    • 澄清一下,你想移动光标而不移动任何文本吗?
    • 对不起,如果我不清楚。我想移动光标当前所在的段落。在许多情况下,“Selection.Range.Relocate wdRelocateUp”正在执行此操作,但在某些情况下,“活动”段落不仅向上/向下移动一行,而且显然是文档结构中的整个级别(尽管我没有t 完全理解其背后的模式)。我想知道这是否取决于活动段落的格式。如果活动段落是例如列表/枚举的一部分,整个列表块被移动(但我只想移动光标所在的行/段落)。
    【解决方案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
    

    这可能无法可靠地管理格式,但您可以添加代码来解决此问题。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      相关资源
      最近更新 更多