我有一个模板.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 {}
的方法?
答案 0 :(得分: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