Accessのコントロールの数え方
- 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 わかりでしたらお教えください。よろしくお願いします。
- mellow91
- お礼率31% (1506/4719)
- その他MS Office製品
- 回答数2
- ありがとう数2
- みんなの回答 (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 を押してやってください。 などなど。
その他の回答 (1)
- piroin654
- ベストアンサー率75% (692/917)
たとえば、フォームのボタンクリック時のイベントで、 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 のように。
お礼
ご回答ありがとうございます!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) こうするとエラーになりました。 ご教授よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- 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
- ベストアンサー
- Visual Basic
- 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
- ベストアンサー
- その他(プログラミング・開発)
お礼
コードまで書いて頂き非常にたすかりました。勉強になります、本当にありがとうございました!