2016-07-06 10 views
0

1から100までの数のチェックボックスを含むuserformがあります。フォームを送信すると、フォームの送信時にそれらの状態を表すバイナリ文字列が作成されるように、 100個のチェックボックスがあり、0は偽、1は真です。これを実行するためのコードはここにある:VBA内の別のユーザーフォームからチェックボックスを設定する

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 

私は今、私は同様のバイナリ文字列を持っている別のフォームから、このユーザーフォームを開き、真または偽のチェックボックスの値を設定するには、この文字列を使用したいです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 "

興味深いことに、" Set c = Controls(BusinessRules.CheckBox1) "というコードを実行するとそのような問題はない。

ご協力いただければ幸いです。

おかげで、

ポール。

+0

こんにちは、VBAでどのくらい熟達していますか?元のフォームは開いたままですか? –

+0

フォームが同時に開かれない場合は、グローバル変数が必要です。 – KyloRen

+0

はいフォームは同時に開いていますが、私はhideコマンドを使用していますが、 –

答えて

1

私はBusinessRulesがあなたに問題を与えていると思います。 Controlsコレクションには、"BusinessRules.CheckBox1"という名前のコントロールはなく、コレクション内には"CheckBox1"という名前のコントロールのみがあります。上記のコメントに他の問題がないと仮定すると(これが呼び出される前にフォームが閉じられているなど)、問題が解決するはずです

+0

それは完璧な意味合いがあります。したがって、これは "Set c = BusinessRules.Controls(nm)"を使用して解決されます。 –

関連する問題