vba - 通过 docx 文件宏中的索引以编程方式删除重复节项?

标签 vba ms-word docx

我有一个 Word 模板,其中的内容控件包含在重复部分内容控件内。我需要创建一个按钮来删除项目重复器,例如添加。

我正在尝试找出如何删除重复部分的项目。但在这种情况下 - 我总是删除最后一项。但是,我希望能够删除用户选择的项目。

Sub delete()
    Dim cc As ContentControl
    Dim Index
    Set cc = ThisDocument.SelectContentControlsByTag("ResolRepeater").Item(1)
    With cc
        .LockContentControl = False
        .LockContents = False
        .AllowInsertDeleteSection = True

        For Index = 1 To cc.RepeatingSectionItems.Count
        If Selection.Range.InRange(cc.RepeatingSectionItems(Index).Range) Or cc.RepeatingSectionItems(Index).Range.InRange(Selection.Range) Then
           Exit For
        End If
        Next Index

        'can't delete, get Run-Time Error '5904': "you can not change the range"
        cc.RepeatingSectionItems(Index).Range.delete

        'this lines always delete last element:
        'cc.RepeatingSectionItems(Index).Range.Select 
        'Selection.Delete

    End With 
End Sub

word template

我很高兴得到任何答案..

最佳答案

您可以通过多种方式执行此操作,其中之一是处理 ContentControlBeforeDelete 事件 MSDN Link

或者,您可以使用当前的 Selection.range,检查该范围(包括开始和结束)是否具有 wdContentControlRepeatingSection 类型的内容控件,然后只需删除该控件即可。

类似于(代码未测试):

var contentControl = Selection.Range.ContentControls;
if (contentControl.Type == Microsoft.Office.Interop.Word.WdContentControlType) 
{
    contentControl.Delete();
}

关于vba - 通过 docx 文件宏中的索引以编程方式删除重复节项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39029771/

相关文章:

vba - Word VBA 查找以 "Date:"开头的行并将其复制到相应页面的顶部

python - 如何在word文件(.docx)python中将两张图片放在同一级别

java - 使用 Apache POI 更改图像布局或包装在 DOCX 中

ms-access - 使用 VBA 更新 Access 2007 中的表单记录集

excel - 当满足 2 个条件时查找重复条目并标记它们

C++ 版本的 VBA,带有更优雅代码的命令

javascript - 如何使用(.xlsx 或 .pdf)网址在 react/javascript 中显示(只读)xlsx、pdf 文件?

excel - 如何从 SharePoint 运行 Excel 宏?

vba - 将突出显示的文本更改为不同的颜色

vba - Word 2003 - 如何使用宏更改样式?