如何通过标签查找并禁用内容控件以删除它及其内容?

2024-01-07

我有一个不幸的任务,被迫为我公司的单位设计一个基于Word 的电子生产卡,尽管我从未使用过VBA。我更愿意在 Excel 中完成此操作,因为我不必费力处理内容控制和页面上各种表格中难以找到的位置,但公司的文档系统强制这一特定的文档系统必须在 Word 中。

我的问题是,对于生产卡的正确形式,我需要使用表格,并且我需要动态生产卡以将其大小限制为与特定订单相关的操作。我选择的解决方案是创建一个完整的表单,并使用用户表单/提示,他们可以在其中选择要使用的部分和要省略的部分,然后删除省略的部分。该解决方案的部分原因是因为这就是他们之前的(基于 Excel 的)生产卡的工作原理,因此它会让最终用户更加熟悉。

因为 MS Word 很挑剔,所以我需要在这些表格中使用内容控制,以免最终用户意外破坏其中的一半,但在一个完整的工作日之后,我仍然无法弄清楚如何找到并关闭表格中单元格的内容控制我想删除。我确实标记了内容控件,因为这似乎是找到它们的唯一合理方法。

这是我当前的子过程代码,但由于某种原因,我无法通过 ccID 行获取 ID,即使我已经验证作为参数提供的字符串是正确的。

Private Sub DeleteCCByTag(ccTag As String)
    Dim cc As ContentControl
    Dim ccID As String
    ccID = ThisDocument.SelectContentControlsByTag(ccTag).Item(1).ID
    'MsgBox ccID        'Debug prompt
    Set cc = ThisDocument.ContentControls(ccID)
    cc.LockContentControl = False
    cc.LockContents = False
    cc.Delete (False)
End Sub

首先-你的代码对我来说是有效的,但是......

  1. ContentControls tag区分大小写,这在您的情况下可能会出现问题

  2. 您可以通过以下方式解决您的问题,而无需搜索 ID 值:

    Private Sub DeleteCCByTag_Alternative(ccTag As String)
    
        Dim cc As ContentControl
        Set cc = ThisDocument.SelectContentControlsByTag(ccTag).Item(1)
    
        With cc
    
            .LockContentControl = False
            .LockContents = False
    
            .Range.Delete               'to delete CC content
    
            .Delete (False)
        End With
    End Sub
    
  3. CC.Delete在您的代码中仅删除ContentControl objects本身而不是其内容。要删除内容,您需要添加我在上面的代码中所做的附加行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过标签查找并禁用内容控件以删除它及其内容? 的相关文章

随机推荐