VBA 复选框不会将状态设置为 TRUE,但会设置为 FALSE

VBA Checkbox wont set state TRUE, but will set FALSE

我正在制作我之前工作的用户表单的改进版本。它的目的是 select 我们系统中每个帐户的某个时期的业务数据,基本上我已经有这部分了。

现在我发现自己迷失了一些可能很简单的东西,但我不知道出了什么问题。

所以在用户窗体上,我有两个按钮。第一个标记为“Unselect All Months”,它将 12 个复选框(以月份命名)的值设置为 FALSE。所以基本上这是一个像这样的点击事件

Private Sub UnselectAllMonths_Button_click()

Dim j As Integer

For j = 0 To TimeAndSubForm.TimePeriodFrame.Controls.Count - 1
    TimeAndSubForm.TimePeriodFrame.Controls(j).Value = "False"
Next j

End Sub

然后我有另一个按钮,它应该做相反的事情并为所有这些复选框设置值 TRUE。只有它没有。它的功能与上述脚本完全相同,下面是它的外观。

Private Sub SelectAllMonths_Button_Click()

Dim j As Integer

For j = 0 To TimeAndSubForm.TimePeriodFrame.Controls.Count - 1
    TimeAndSubForm.TimePeriodFrame.Controls(j).Value = "True"
Next j

End Sub

我做错了什么?

如果我编写没有变量 j 的代码,我会得到我想要的,并且当我单击按钮时复选框将被选中。

TimeAndSubForm.TimePeriodFrame.Controls(0).Value = "True"
TimeAndSubForm.TimePeriodFrame.Controls(1).Value = "True"
'etc

基本上就是这样。

由于我无法发表评论,所以我会在这里提问: 您是否通过单步执行代码进行故障排除? For j = 0 To TimeAndSubForm.TimePeriodFrame.Controls.Count - 1

的值是多少

如果为0则不执行循环。 你能查一下吗?

阅读您的评论但我没有问第一个值是什么,我问的是 TimeAndSubForm.TimePeriodFrame.Controls.Count 的值是多少。你能检查一下吗?

好的,有了 StureS 的输入,我明白现在发生了什么。代码遍历框架中的所有控件,并激活这些控件。好吧,太糟糕了,有些控件将复选框状态设置为 FALSE。

我可以在这里使用 do until 循环,一切正常。

Private Sub SelectAllMonths_Button_Click()

Dim j As Integer

j = 0
Do Until j > 11
    TimeAndSubForm.TimePeriodFrame.Controls(j).Value = "True"
    j = j + 1
Loop

End Sub

我现在觉得很傻,但是谢谢

编辑:有人给 StureS 投了赞成票,我不能以我的低声望:)