0

我有一个模板 .dotm,其中有多个复选框内容控件。它们按如下方式分组:

[chk_1] Attach all the items listed below:

      [chk_1_1] Item A
      [chk_1_2] Item B
      [chk_1_3] Item C

[chk_2] Send the details provided below:

      [chk_2_1] Info A
      [chk_2_2] Info B
      [chk_2_3] Info C

我正在尝试做的是一种自动检查chk_1是否检查了任何子项的方法,作为某种防故障系统,如果用户忘记手动检查chk_1. 到目前为止,我已经设法手动执行此操作,如下所示:

Private Sub btnSubmit_Click()
Dim ctl As ContentControl
For Each ctl In ActiveDocument.ContentControls
If ctl.Type = wdContentControlCheckBox Then
    If ctl.Tag = "chk_1_1" or ctl.Tag = "chk_1_2" or ctl.Tag = "chk_1_3" Then
        If ctl.Checked = True Then
            ActiveDocument.SelectContentControlsByTag("chk_1").Item(1).Checked = True
        End If
    End If
End If         
Next
Dim ctl2 As ContentControl
For Each ctl2 In ActiveDocument.ContentControls
If ctl2.Type = wdContentControlCheckBox Then
    If ctl2.Tag = "chk_2_1" or ctl2.Tag = "chk_2_2" or ctl2.Tag = "chk_2_3" Then
        If ctl2.Checked = True Then
            ActiveDocument.SelectContentControlsByTag("chk_2").Item(1).Checked = True
        End If
    End If
End If         
Next
End Sub

此代码在单击 ActiveX 按钮时执行btnSubmit,如果选中任何子复选框,则自动勾选父复选框。

我想简化代码,因为随着时间的推移,将会有多个组,每个组有 20 多个复选框,并且代码将更难编写。

有没有办法使用字符串或检查所有标记的复选框的状态chk_x_y,然后修改状态chk_x

4

1 回答 1

0

像这样的东西可能更容易阅读和维护。

如果控件命名一致,则无需检查控件是否为复选框 - 名称将识别它。

Select Case是使用多个“或”标准时的替代方案If- 更容易阅读......在这种情况下,它可以比较一组标签名称的公共部分。“大于”将拾取上层控件下只有公共字符的较长标签名称。

请注意,在使用这种方法时,您需要通过字母表向后工作。

然后,每次执行的实际操作都放在一个单独的过程中,由每个“案例”调用。

因此,在为多个控件编写代码时,您几乎可以复制/粘贴Case然后更改每个控件集的两个标记字符串。

Sub GetCC_Set()
    Dim cc As Word.ContentControl
    Dim doc As Word.Document

    Set doc = ActiveDocument
    For Each cc In doc.Contentcontrols
        Select Case cc.tag
            Case Is > "ck2"
                Debug.Print 2
                CheckItems "ck2", cc
            Case Is > "ck1"
                Debug.Print 1
                CheckItems "ck1", cc
            Case Else
                Debug.Print cc.tag
        End Select
    Next                
End Sub

Sub CheckItems(tag As String, cc As Word.ContentControl)
    If cc.Checked = True Then
        cc.Parent.SelectContentControlsByTag(tag).Item(1).Checked = True
    End If
End Sub
于 2019-05-09T19:02:25.917 回答