在VBA

时间:2016-07-06 10:50:51

标签: vba checkbox userform

我有一个userform,其中包含一些从1到100的复选框。我编写了一些非常简单的代码,以便在提交表单时创建一个二进制字符串,表示这100个复选框的状态,其中0为false 1是真的。执行此操作的代码在此处:

Private Sub BusRulesSubmit_Click()
 Dim myBinaryString As String
 Dim nm As String
 Dim c As Control

 For busRuleIdx = 1 To 100
  nm = "CheckBox" & busRuleIdx
  Set c = Controls(nm)
  If c.Value = True Then
   myBinaryString = myBinaryString & "1"
  Else
   myBinaryString = myBinaryString & "0"
  End If
 Next

 msgBox myBinaryString
End Sub

我现在想从另一个表单中打开此Userform,其中我有一个类似的二进制字符串,并使用此字符串将复选框的值设置为true或false as appropariate。但是在设置控件时遇到问题。代码在这里:

Private Sub populateBusRules()
 Dim c As Control
 Dim myBRBinary As String
 myBRBinary =    "000000000011100000000000000000000000000000000000000000000000000000000010000000000000000000000000000"

 For busRuleIdx = 1 To 100
  nm = "BusinessRules.CheckBox" & busRuleIdx
  Set c = Controls(nm)
  If Mid(myBRBinary, buRuleIdx - 1, 1) = 1 Then
   c.Value = True
  Else
   c.Value = False
  End If
 Next
End Sub

当我运行上面的操作时,我收到运行时错误"找不到指定的对象"并且在进行调试时突出显示了这个问题,其中代码表示"设置c =控制(nm)" - 我可以看到它在第一轮循环中失败,即nm =" BusinessRules.CheckBox1"

有趣的是,如果我运行代码"设置c =控件(BusinessRules.CheckBox1)"我没有遇到这样的问题。

非常感谢任何帮助。

谢谢,

保罗。

1 个答案:

答案 0 :(得分:1)

我认为BusinessRules给你的问题。在Controls集合中,没有名为"BusinessRules.CheckBox1"的Control,"CheckBox1"集合中只有一个名为BusinessRules.Controls的控件。假设上面的评论中没有提到其他问题(比如在调用之前表格被关闭),那么这应该可以解决您的问题