2017-11-02 24 views
1

のための動的な入力を作成し、私はプログラミングに新しいです、私の問題はこれです:一つ一つが、「「真」またはブール値をチェックする必要があり、フォーム上の私は誰かが役立つことを願っ変数

40のチェックボックスFalse "(ユーザーがチェックするか、チェックを外した)、" True "の各ケースごとに個別のコードを実行できます。

私は私が私に与えられたチェックボックスの値を与えるために、変数に使用、「MS Accessのチェックボックスリファレンス」のカウンタ「I」を含めるようにしようとしています。次のコードでは、私が達成しようとしていることを示す必要があります。非常に高度なソリューションを使用せずに誰かが正しい方向に向けることができますか?私はそれは、単一の工程またはそれだけでなく文字列実行するコマンドとして、変数のための私の入力を見ているので、このすべてを実行することはできませんので、それは推測:

Do While Flag = True 

Dim CheckboxVar As Boolean 
i = i + 1 

If i = 40 Then 
    Flag = False 
End If 

CheckboxVar = "Me.Checkbox" & i & ".Value" 
AddWhereSQL = SQLBuilder (CheckboxVar) 
Loop 

(CheckBox1をの値を取得して送信しますそれSQLBuilder、Checkbox2を取得し、SQLBuilderに送信し、その上に)

+0

私のケースとペルソナについては、Kostas Kのソリューションが最も効果的です(実装され、実行されています)。私はタグの代わりにコントロールの名前を使用し、どのチェックボックスがTrueであるかに応じて個別の/固有のコードを実行します。このサイトは素敵な人と素晴らしい場所です、ありがとうございました。 Michael – Spreed

答えて

2

ループにコントロールを通じて、あなたがこれを行うことができます:あなたのコードは標準モジュール内に配置されている場合

Dim i As Long 
For i = 1 To 40 
    If Me.Controls("CheckBoxControlName" & i).Value = -1 Then 
     'The control value is True 
    End If 
Next i 

を、変更MeForms!YourFormName

+0

小メモ:メモリと実行時間を節約するためにlongの代わりに整数を使用します(最大値は40です)。 –

+2

@Erik von Asmuth VBAは内部的にすべての整数をLongに変換しますので、パフォーマンス上の利点はありません。 @ErikvonAsmuth。 –

+0

私は今日も何か新しいことを学びました(Kostas Kに感謝します)。https://stackoverflow.com/questions/26409117/why-use-integer-instead-of-long – CallumDA

0

"for"ループが必要だと思います。たぶんのようなもの:このようなあなたのチェックボックスを通して

CheckboxVar = " WHERE " 
For i = 1 to 40 
    CheckboxVar = Me.Controls("Checkbox" & i).Value = True & " AND " & checkboxVar 
next 
5

ループ:

Sub Test() 
    Dim ctrl As Control 

    For Each ctrl In Me.Controls 
     If TypeOf ctrl Is CheckBox Then 
      If ctrl.Value = True Then 
       'do something 
      End If 
     End If 
    Next ctrl 
End Sub 

などあなたのチェックボックス"CheckBox1を"、 "Checkbox2" を、命名。最高の命名法ではなく、面倒です。上記のコードは、フォーム上のすべてのチェックボックスを検出しますが、たとえば、特定のタグを持つすべてのチェックボックスに簡単に制限することができます。

+1

ループ内にあるべきではないチェックボックスを考慮する必要があることに注意してください。タグを使用することができます(たとえば、必要なすべてのチェックボックスにタグを設定し、 'ctrl.Tag =" something "Then)をチェックしてください) –

+0

あなたのコードはUserformsに適用されますが、Accessフォームには適用されません(MSFormsではありません)。 - フォーム上に40個のチェックボックスがある場合、それらの名前を決める唯一の合理的な方法は 'Checkbox1'、' Checkbox2'、... – Andre

+0

@ErikvonAsmuth、タグ付けの仕事 - 私はそれらをすべて入れることを提案しました例えば、フレーム内で 'UserForm1.Frame1.Controls'をループします。 – CallumDA

関連する問題