Accessのコントロールの数え方

このQ&Aのポイント
  • Access 2003のフォームに配置されたチェックボックスの数を知る方法と、チェックが入っているチェックボックスの数を知る方法について教えてください。
  • ネットで検索した結果、指定のコードを使用すればチェックボックスの数とチェックが入っているチェックボックスの数を取得できるようですが、具体的にはどのように利用すれば良いのでしょうか?
  • 回答方法を教えていただきたいです。よろしくお願いします。
回答を見る
  • ベストアンサー

Accessのコントロールの数え方

Access 2003のコントロールについてお教えください。 フォーム1というフォームにチェックボックスがいくつも配置されています。 チェックボックスがいくつ配置されているか知る方法はあるのでしょうか? また、いくつのチェックボックスにチェックが入っているか知る方法はあるでしょうか? ネットで検索したところ、下記のコードが約にたつような気がするのですが、どうやって活用すればよいのかがわかりません・・・・ For Each ctl In Me.Controls With ctl If .ControlType = acTextBox Then 'コントロールの種類がテキストボックスなら値をNull(空)に設定 .Value = Null End If End With Next ctl わかりでしたらお教えください。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

蛇足回答ですが、標準モジュールにて Sub QQ() On Error Resume Next   Dim ctl As Control   Dim i As Integer, j As Integer, k As Integer   For Each ctl In Forms!フォーム1 '(フォームビューで開いてあること)     i = i + 1     Debug.Print "名前", ctl.Name     Debug.Print "タイプ", TypeName(ctl)     Debug.Print "値", ctl.Value '値を持てないモノもありますので On Error Resume Next で逃げてます     Debug.Print i & " 個目///////////////"      If TypeName(ctl) = "CheckBox" Then     j = j + 1     If ctl = True Then       k = k + 1     End If   End If   Next   MsgBox "チェックボックス数=" & j & " 入り数=" & k End Sub イミディエイトウィンドウに出力されるので色々調べられます。 フォームにチェックボックスが一杯あって数えるのが大変なら フォームのモジュールになりますが Function chkCount() As Integer   Dim ctl As Control   For Each ctl In Me.Controls     If TypeName(ctl) = "CheckBox" Then       If ctl = True Then       chkCount = chkCount + 1       End If     End If   Next End Function としておいて、適当なテキストボックスを作成し そのコントロールソースに、=chkcount() と入れてあげればカウントされます。 チェックボックスにチェックを入れても即座には反映されないので F9 を押してやってください。 などなど。

mellow91
質問者

お礼

コードまで書いて頂き非常にたすかりました。勉強になります、本当にありがとうございました!

その他の回答 (1)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

たとえば、フォームのボタンクリック時のイベントで、 Private Sub コマンド12_Click() Dim i As Integer Dim ctl As Control i = 0 For Each ctl In Me.Controls If TypeOf ctl Is CheckBox Then i = i + 1 End If Next ctl MsgBox i End Sub のように。

mellow91
質問者

お礼

ご回答ありがとうございます!typeof isを知りませんでした。勉強になりました。ありがとうございます。

関連するQ&A

  • コントロールタイプを絞ってループしたい

    アクセスのフォーム上のコントロールをループする際に テキストボックスだけ絞ってループしたいのですが Sub Sample() Dim myFormName As String Dim ctl As Control myFormName = "フォーム1" For Each ctl In Forms(myFormName).Controls If ctl.ControlType = acTextBox Then End If Next ctl End Sub これだとテキストボックスの量が多くて、2秒くらいかかるのですが For Each ctl In Forms(myFormName).Controls この時点で、テキストボックスだけ絞る方法はありますか? For Each ctl In Forms(myFormName).ControlType(acTextBox) こうするとエラーになりました。 ご教授よろしくお願いします。

  • For Each  すべてループされない?アクセス

    For Each ctl In Forms(FormName).Controls Debug.Print ctl.Name If ctl.ControlType = acTextBox Then If ctl.Name Like "削除*" Then DeleteControl FormName, ctl.Name End If End If Next ctl こういうループの仕方は、完全型ではないのでしょうか? フォーム上に「削除」で始まるテキストボックスをすべて削除したいのですが 例えば4個あれば、2個のコントロールしか削除されません。 コントロールを削除することにより、インデックスが狂うのでしょうか?

  • もしフォームヘッダーにコントロールがあるのなら

    アクセスのフォームの、フォームヘッダーに検索用テキストボックスとコンボボックスがあり、 詳細エリアにレコードソース(コントロールソース)に紐付いたテキストボックスが複数あります。 フォームヘッダーのフィルタを解除するコマンドを実行して、 フォームヘッダーのテキストボックスとコンボボックスをnullにしたいのですが、 vbaで「もしフォームヘッダーなら」ってするにはどうすればいいでしょうか? フォームヘッダーのコントロール名も詳細エリアのコントロール名も 区別のないコントロール名でなのでコントロール名で条件分岐をすることは不可能です。 Private Sub フィルタを解除コマンド_Click() Dim ctl As Control For Each ctl In Me.Controls If (ctl.ControlType = acTextBox) Or (ctl.ControlType = acComboBox) Then 'ここで、もしフォームヘッダーにコントロールがあるのならってしたい Me.Controls(ctl.Name) = Null End If Next ctl Me.Form.FilterOn = False End Sub このコードに付け加えてくれませんか? Debug.Print ctl.Name でコントロール名を取得するとフォームヘッダーも詳細もどちらのコントロール名も取得されてしまいます。 On Error Resume Next 以外でお願いします。

  • テキストボックスなら空白にする

    フォームにテキストボックス2つとコンボボックス2つを設置して、 規定値に値を設定し、 Private Sub cb_テキストボックスなら空白にする_Click() Dim ctl As Control For Each ctl In Me.Controls If ctl.ControlType = acTextBox Then ctl.Value = Empty End If Next ctl End Sub としたのですが何も起こりません。 空白にするにはどうすればいいでしょうか? あと、 ctl.Valueと打つ時に、 ドットの後に、Valueが一覧に出てきませんでした。 それが原因で空白にならないのでしょうか? ご回答よろしくお願いします。

  • アクセスのサブフォームの値のチェック

    Accessのサブファームにある、コンボボックスの値をチェックしたいので、下記のようにしてみました。 Dim ctl As Control For Each ctl In Me.Controls If ctl.ControlType = acSubform Then msgbox Forms!メインフォーム名!サブフォームコントロール名.Form!コントロール名 End If Next すると、サブフォームの現在選択しているコンボボックスの値しか表示されません。 現在表示されているサブフォームのコンボボックスの値すべてを表示させるにはどうすればいいのでしょうか。よろしくお願います。

  • アクセス超初心者です。

    アクセス超初心者です。 下記内容のイベントプロシージャーを記述しました。 フォーム内にクリアというコマンドボタンを作成。で、クリックしたら書き込まれていたフォームの内容が消えるように作ったのですが。(ネット上で見つけたプロシージャーを参考に作成しました) 黒丸部分が黄色くなってエラーになります。 どのように修正すればいいのでしょうか? 分かる方いましたらご教示ください<m(__)m>よろしくお願い致します。 Private Sub cmd_クリア_Click() Dim CT1 As Control For Each CT1 In Me.Controls If CT1.ControlType = acTextBox Or CT1.ControlType = acComboBox Then ●CT1.Value = Null ElseIf CT1.ControlType = acCheckBox Then CT1.Value = False End If Next End Sub

  • コンボボックスの値もクリアしたい!

    コンボボックスの値もクリアしたい! 現在下記のコードでtxtBoxの値をクリアしていますが、 同フォームにあるコンボボックスの値もクリアしたいのですが解りません。 教えてください。 Public Sub txtクリア(objForm As Object) Dim txtclear As Control For Each txtclear In objForm.Controls If txtclear.ControlType = acTextBox Then txtclear.Value = Null End If Next End Sub

  • アクセス For Eachの時点 絞る

    For Eachの時点で、コマンドボタンのみに絞ることは可能ですか? Sub Sample() Dim myFormName As String Dim ctl As Control myFormName = "フォーム1" For Each ctl In Forms(myFormName).Controls Debug.Print ctl.Name Next ctl End Sub これでフォーム上の全てのコントロール名を取得できますが ループの時点でコマンドボタンのみを抽出できますか? For Each ctl In Forms(myFormName).Controls If ctl.ControlType = acCommandButton Then Debug.Print ctl.Name End If Next ctl こうすれば、コマンドボタンのみ絞れますが コントロールの数が多すぎて、処理に時間がかかります。 なので For Each ctl In Forms(myFormName).Controls の部分の、ループの時点でコマンドボタンを絞りたいのですが 絞れる方法があれば教えてください。

  • VBAでコントロールの数をカウント。結果が違う

    Access 2003のフォームについてお教えください。 フォームデザインビューで、「Form1」にテキストボックスが1つ配置されています。 レコードソースは連結されているので、フォームビューで見ると現在10のテキストボックスが フォームには表示されています。 やりたい事 フォームビューで見た時のコントロールの数をカウントしたい。ここでは、「10」という 結果が欲しいです。 そこで下記のコードを書き実行しましたが、「1」としか表示されません。 デザインビューで見ると、テキストボックスの数は1なので、それが表示 されている感じがします。 フォームビューで見た時のコントロールの数を数えるにはどのようにしたらよいでしょうか? Private Sub Form_Load() Dim ctl As Control Dim counter As Integer On Error Resume Next counter = 0 For Each ctl In Me.Controls 'コントロールがチェックボックスか判別 If TypeOf ctl Is TextBox Then counter = counter + 1 End If Next ctl msgbox counter End Sub

  • publicプロシージャの記述方法で教えてください。

    publicプロシージャの記述方法で教えてください。 非連結テキストボックスのクリアを複数のフォームで行いたい為、標準モジュールに下記のコードを作成し、各フォームの削除ボタンを押しCallで呼び出すと [Meキーワードが不正] とエラーが出てしまいます。 どの様にすれば良いかアドバイスよろしくお願いいたします。 Public Sub txtクリア() Dim txtclear As Control For Each txtclear In Me.Control If txtclear.ControlType = acTextBox Then txtclear = Value = Null End If Next End Sub

専門家に質問してみよう