根据其他复选框状态更改内容控制复选框的状态

时间:2019-05-08 11:20:53

标签: vba ms-word word-contentcontrol

我有一个模板.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 。 到目前为止,我已经设法手动执行此操作,如下所示:

btnSubmit

如果选中了任何子复选框,则单击ActiveX按钮chk_x_y并自动选中父复选框时,将执行此代码。

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

是否可以使用字符串或检查标记为chk_x的所有复选框的状态,然后修改状态 string secretWord = "Catatonic"; string guess = ""; int guessCount = 0; int guessLimit = 3; bool outOfGuesses = false; bool firstGuess = false; Console.WriteLine("Guess the secret word: "); guess = Console.ReadLine(); guessCount++; if (guess == secretWord) { Console.WriteLine("You win!"); firstGuess = true; } else do if (guessCount < guessLimit) { Console.WriteLine("Wrong answer, try again: "); guess = Console.ReadLine(); guessCount++; } else { outOfGuesses = true; } while (guess != secretWord && !outOfGuesses); if (guess != secretWord && outOfGuesses) { Console.WriteLine("You're out of guesses mate"); } else if (!firstGuess) { Console.WriteLine("You're a winner!"); } else {} 的方法?

1 个答案:

答案 0 :(得分:0)

类似的东西可能更易于阅读和维护。

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

当使用多个“或”条件时,

Select CaseIf的替代选择-有点容易阅读...而且在这种情况下,它可以比较组的标记名的公共部分。 “大于”将在只有通用字符的上级控件下选择更长的标签名称。

请注意,使用这种方法时,您需要从字母上倒退。

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

因此,在为多个控件编写代码时,您几乎可以复制/粘贴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
相关问题