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 投了赞成票,我不能以我的低声望:)
我正在制作我之前工作的用户表单的改进版本。它的目的是 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 投了赞成票,我不能以我的低声望:)