删除 VBA 中 adding/deleting 书签后的额外行

Remove extra line after adding/deleting a bookmark in VBA

在我的 Word 模板中,我的要点很少,我将 select 基于 GUI 中的 selection 所需的要点,并删除其余不是 [=50 的要点=] 从代码中编辑。所以这取决于用户他想要多少分 select.

我已经为上面大括号中显示的所有这些点创建了书签。

现在的问题是,用户 select 上面列表和输出中的几个要点会在下面留下额外的空白行。

我尝试了很多方法,从更改书签的 selection 到从代码中添加项目符号。我需要去掉多余的空白行。
但似乎没有任何效果。我将不胜感激这方面的帮助。 TIA

If .cboChanges1.Value = "No" Then
     DeleteBookmark ("bookmark1")
Else
     AddBullet ("bookmark1")
End If
If .cboChanges2.Value = "No" Then
     DeleteBookmark ("bookmark2")
Else
     AddBullet("bookmark2")     
End If

etc.. 其中 cboChanges1 和 cboChanges2 是选择 Yes/no.

的组合框
Sub DeleteBookmark(strBookmark As String)
    Dim rng As Range
    Set rng = ActiveDocument.Bookmarks(strBookmark).Range
    rng.Delete
    Set rng = Nothing
End Sub

截图前

前 3 个选项后的输出屏幕,您可以看到突出显示的额外空白行

我是动态添加要点,如下

Sub AddBullet(strBookmark As String)
    ActiveDocument.Bookmarks(strBookmark).Select
    Selection.Range.ListFormat.ApplyBulletDefault
End Sub

书签是这样排列的,

table 单元格始终包含单元格结束标记,它是段落和单元格结束标记的组合。这意味着空单元格始终至少包含一个段落。

当您删除最后一个书签中的文本时无法删除单元格结束标记,您将得到一个空段落,因为之前的书签范围以段落标记结束。

您可以在 DeleteBookmark 例程中通过检查单元格最后一段的长度来处理此问题。如果只包含两个字符则没有正文,可以删除前面的段落标记。

Sub DeleteBookmark(strBookmark As String)
   Dim rng As Range
   Set rng = ActiveDocument.Bookmarks(strBookmark).Range
   rng.Delete
   Set rng = rng.Cells(1).Range.Paragraphs.Last.Range
   If Len(rng.Text) = 2 Then
      'paragraph contains no text so delete preceding paragraph mark
      rng.Collapse wdCollapseStart
      rng.MoveStart wdCharacter, -1
      rng.Delete
   End If
   Set rng = Nothing
End Sub

如果您要为 Word 编写代码,您需要了解格式标记是什么,以便您了解文档的构造方式。

仅供参考 select 应用项目符号的范围是不必要的。

Sub AddBullet(strBookmark As String)
    ActiveDocument.Bookmarks(strBookmark).Range.ListFormat.ApplyBulletDefault
End Sub