Accessのサブファームにある、コンボボックスの値をチェックしたいので、下記のようにしてみました。
Dim ctl As Control
For Each ctl In Me.Controls
If ctl.ControlType = acSubform Then
msgbox Forms!メインフォーム名!サブフォームコントロール名.Form!コントロール名
End If
Next
すると、サブフォームの現在選択しているコンボボックスの値しか表示されません。
現在表示されているサブフォームのコンボボックスの値すべてを表示させるにはどうすればいいのでしょうか。よろしくお願います。
A 回答 (10件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
たとえば、親フォームにボタンを設定して、
そのボタンのクリックイベントで、
Private Sub コマンド0_Click()
Dim ctl As Object
Dim i As Long
For Each ctl In Me!埋め込み0.Form.Controls
If TypeOf ctl Is ComboBox Then
If ctl.Name = "コンボ1" Then
For i = 0 To ctl.ListCount - 1
MsgBox ctl.ItemData(i)
Next i
End If
End If
Next ctl
End Sub
コンボボックスの値を参照するには、
For i = 0 To ctl.ListCount - 1
MsgBox ctl.ItemData(i)
Next i
のような、書式で参照します。
詳しい説明をありがとうございます。
私の予想では、例に挙げたプログラムの一部分を修正するだけで目的が達成できると思っていました。
なぜなら、「サブフォーム 値 チェック」で調べると、例のようなプログラムしか見つからなかったからです。
しかし、回答は予想とは違うのでかなり戸惑っています。
そしてよくわからないのが、「ctl.ListCount - 1」の部分です。
「ListCount」を調べてみると、「表示している各行の値」となっています。
この例を試すと、1つのコンボの選択肢すべての値が表示されるような気がするのですが違うのでしょうか。
実際に試してみればわかるのですが、まだよくわかっていないので、自分の環境に置き換えて試すことが出来ません。
また、先ほども書きましたが、私の例を修正すれば目的を達成できると思っていたので、質問でやりたいことを詳しく書きませんでした。
改めてやりたいことを書きます。
親フォームにボタンがあります。
そのボタンを押すとサブフォームのコンボボックスをチェックします。
コンボボックスの初期値は1です。そして、コンボボックスの2か3を選ばなければなりません。
もし、サブフォームのコンボボックスの1つでも初期値の1があれば、ダイアログで2か3を選択するように促して、処理をとめたいと思っています。
ちなみに、コンボボックスの2と3は、レポートの番号です。
コンボボックスは、データをどのレポートで印刷するかの指定です。
だから、私が知りたいのは、サブフォームの複数あるコンボボックスの、選ばれた値です。
後から情報を出してすみません。今度からこのような事の無いようにします。
No.2
- 回答日時:
No1です。
回答の、For Each ctl In Me!埋め込み0.Form.Controls
のところで、
Me!埋め込み0
は、質問の中の
Forms!メインフォーム名!サブフォームコントロール名
と同じです。つまり「埋め込み0」とはサブフォームを
表示しているコントロール名で初期値を書いています。
No.3
- 回答日時:
メッセージボックスを何度も表示するよりは、
一度に表示したほうがわかりやすいので、
Private Sub コマンド0_Click()
Dim ctl As Object
Dim i As Long
Dim var As Variant
For Each ctl In Me!埋め込み0.Form.Controls
If TypeOf ctl Is ComboBox Then
If ctl.Name = "コンボ1" Then
For i = 0 To ctl.ListCount - 1
var = var & ctl.ItemData(i) & Chr(13)
Next i
End If
End If
Next ctl
MsgBox var
End Sub
のようにしてみてください。
No.4
- 回答日時:
何度もすみません。
たとえばコンボボックスの表示が001 黒川
002 徳川
003 豊臣
のようになっている場合に、番号をすべて確認したい
場合は、
var = var & ctl.Column(0, i) & Chr(13)
名前の列を確認したい場合は、
var = var & ctl.Column(1, i) & Chr(13)
のようにしてください。両方まとめて確認したい場合は、
var = var & ctl.Column(0, i) & "---" & ctl.Column(1, i) & Chr(13)
ついでに、No3の回答も
var = var & ctl.Column(0, i) & Chr(13)
としてもいいです。列が一つしかない場合でも、対応できるようなので。
No.5
- 回答日時:
複数あるコンボボックスのそれぞれで表示している値を
取得する、ということですね。
For Each ctl In Me!埋め込み0.Form.Controls
If TypeOf ctl Is ComboBox Then
MsgBox ctl.Value
End If
Next ctl
あるいは、
For Each ctl In Me!埋め込み0.Form.Controls
If TypeOf ctl Is ComboBox Then
MsgBox ctl.Name & "の値は" & ctl.Value
End If
Next ctl
で、どうでしょう。また、
>そのボタンを押すとサブフォームのコンボボックスをチェックします。
>コンボボックスの初期値は1です。そして、コンボボックスの2か3を
>選ばなければなりません。もし、サブフォームのコンボボックスの1つ
>でも初期値の1があれば、ダイアログで2か3を選択するように促して、
>処理をとめたいと思っています。
ということであれば、
For Each ctl In Me!埋め込み0.Form.Controls
If TypeOf ctl Is ComboBox Then
If ctl.Value = 1 Then
MsgBox ctl.Name & "の値は1です値を変更してください。"
End If
End If
Next ctl
のような設定ではどうですか。
>そしてよくわからないのが、「ctl.ListCount - 1」の部分です。
>「ListCount」を調べてみると、「表示している各行の値」となっています。
>この例を試すと、1つのコンボの選択肢すべての値が表示されるような
>気がするのですが違うのでしょうか。
はい、その通りです。一つのコンボボックスの値をすべて表示
するものと思っていました。
ありがとうございます。
結果から言うと、私が例で上げた結果と同じでした。
つまり、サブフォームに2列あっても、選択されている列の結果しか表示されませんでした。
メッセージボックスは1回しか表示されません。
2列あれば、2回メッセージボックスを表示させたいと考えています。
もしかして、私が用語名を間違えているのでしょうか?
今回したいのは、請求書や受注書のような様式の、明細部分のチェックをしたいと思っています。
サブフォームとは、明細部分のことを言っています。
その明細部分の項目として、横1列にコンボボックスが1つあります。
そして、そのようなコンボボックス1つの列が複数あります。
その、それぞれの列のコンボボックスの値をチェックしたいと考えています。
No.6
- 回答日時:
問題になるサブフォームが1個だけで
コンボボックスも3個だけなら
無理してループする必要がないのでは?
With Me.サブフォームコントロール名.Form
MsgBox .コンボボックス1
MsgBox .コンボボックス2
MsgBox .コンボボックス3
End With
ありがとうございます。
今回作っているのは、受注処理に使おうと思っています。
サブフォームは、受注明細となります。
そのため、コンボボックスは3つとは限りません。
場合によったら、10個や20個になるかも?
つまり、可変のためループする必要があります。
No.7
- 回答日時:
具体的にしてみます。
(1)
サブフォームが図のようになっているとします。現在選択されている
のは一番上のレコードです。親フォームのボタンクリックをすると、
メッセージボックスで、
「設定1の値は1です。値を変更してください。」
「設定3の値は1です。値を変更してください。」
とでます。これがNo1での補足を基に出したNo5の回答です。
(2)
補足の、
>その明細部分の項目として、横1列にコンボボックスが1つあります。
>そして、そのようなコンボボックス1つの列が複数あります。
これが、また「?」なのです。
下図のコンボボックスの配置を言いますと、
「明細にテキストボックス二つと、コンボボックスが三つ配置されています。」
という、説明になるのですが、勘違いしていますか?
本当にありがとうございます。
今回添付された画像から、「設定2」と「設定3」のコンボボックスを外せば、私の希望している形です。
ところで、質問者は画像を挿入できないのでしょうか?
画像を見てもらったほうが早いので、画像を作ったのですがアップする方法が見当たりません。
No.8
- 回答日時:
No.6 です。
> msgbox Forms!メインフォーム名!サブフォームコントロール名.Form!コントロール名
これから見る限り、サブフォーム、コントロール とも 1個で固定であるはず。
なのに、
> For Each ctl In Me.Controls
で、ループしている。
何か変だなと思っていましたが、
No.6 へのコメントで
> そのため、コンボボックスは3つとは限りません。
> 場合によったら、10個や20個になるかも?
>
> つまり、可変のためループする必要があります。
No.5 さんへのコメントで
> その明細部分の項目として、横1列にコンボボックスが1つあります。
> そして、そのようなコンボボックス1つの列が複数あります。
> その、それぞれの列のコンボボックスの値をチェックしたいと考えています。
ようやく分かりました。
プログラミングは出来るけど
Access そのものに関しての知識があまりない。
用語の間違いで、誤解が生じた、ということですね。
「フィールド」も「レコード」も「列」という言葉で片付けているので。
まずは、こちらをご覧ください。
データベースの基礎であるテーブルとは - Access 入門
http://office.microsoft.com/ja-jp/access-help/RZ …
★ご質問の内容は
メインフォームに帳票形式サブフォーム「受注明細」があります。
メインフォームのコマンドボタンをクリックしたときに
サブフォームのフィールド 「帳票種別」 の値が "1" であるレコードがあるかをチェックしたい。
ということでしょう。
(コントロール名等は、適当に読み替えてください。)
やり方はいろいろありますが
・RecordsetClone で 検索する。
Dim rst As DAO.Recordset
Set rst = Me.受注明細.Form.RecordsetClone
rst.FindFirst "帳票種別 = '1'" ' テキスト型の場合
If Not rst.NoMatch Then
MsgBox "2、3を選んでね"
End If
rst.Close
Set rst = Nothing
・サブフォームに 「帳票種別 = '1'」 であるレコード数を表示するテキストボックスを作成し
その値をメインから参照する。
サブフォームにフォームフッターを配置(非表示にする)。
テキストボックスを配置。
コントロールソースを
= Sum(IIf([帳票種別] = '1', 1, 0))
ありがとうございます。
ACCESSの機能で簡単にできると思っていたのですが、できないのでしょうか。
よくわからないので、
親に振ってある、id(連番)を取得して、サブフォームからidのあるレコードを抽出します。
そのレコードの該当箇所(コンボボックスの値)をチェックする方法でできないかと考えています。
「RecordsetClone」は、初めて見ます。
わからない部分を調べて、教えていただいた方法を解析したいと思います。
ありがとうございました。
No.9
- 回答日時:
すべての補足を総合すると、
For Each ctl In Me!埋め込み0.Form.Controls
If TypeOf ctl Is ComboBox Then
If ctl.Value = 1 Then
MsgBox ctl.Name & "の値は1です値を変更してください。"
Else
If Not IsNull(ctl.Value) Then
MsgBox ctl.Name & "の値は" & ctl.Value
Else
Msgbox ctl.Name & "は選択されていません。"
End If
End If
End If
Next ctl
ということですかね。
画像はいいようなので。
最初の補足の中の、
>ブフォームのコンボボックスの1つでも初期値の1があれば、
>ダイアログで2か3を選択するように促して、処理をとめたいと思っています。
の、
>初期値の1
の解釈にひっかかっていたもので、もしかしたら
いろいろ行き違いがあったかもしれません。
No.10
- 回答日時:
>「設定2」と「設定3」のコンボボックスを外せば、私の希望している形です。
ようするに、明細行にコンボボックスは一つ
ということですね。
それから、補足の中の「選択されている」というのも
「複数選択」などどこでどのように何を選択しているのか
よくわからないので、一旦、すべての回答を取り下げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessの参照フィールドの列がずれてしまいます 1 2023/07/19 15:00
- Access(アクセス) Accessにインポートした複数のテーブルを表示させる方法が分かりません。 1 2023/01/30 20:22
- Access(アクセス) Dlookupにエラーがでてしまう 1 2022/10/31 14:35
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) ユーザーフォームの書き出しで追加のご相談 ユーザーフォームの値をシートに書き出す際、コードが表示され 2 2022/08/05 10:58
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- JavaScript テーブルの中のセレクトボックスの値が0のとき、非表示にしたい 3 2022/05/29 10:13
- Access(アクセス) Accessでセレクタをダブルクリックで別フォームで詳細表示 3 2022/12/20 10:36
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
至急!尿検査前日にオナニーし...
-
白血球が多いとどんな心配があ...
-
腕を見たら黄色くなってる部分...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
精子が黄色?
-
勃起する時って痛いんですか? ...
-
尿検査前日に自慰行為した時の...
-
尿検査の前日は自慰控えたほう...
-
口の中に黒い血の塊
-
これって喉仏ですか? 私は女性...
-
精子に血が・・・
-
中出しをするとお腹が痛い・・・。
-
納豆食べた後の尿の納豆臭は何故?
-
甲状腺腫れ
-
EXCELで式からグラフを描くには?
-
EXCELで条件付き書式で空白セル...
-
筋トレするとチンコが縮んじゃ...
-
爪が紫色?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
至急!尿検査前日にオナニーし...
-
首吊りどこ締めるの
-
尿検査の前日は自慰控えたほう...
-
尿検査前日に自慰行為した時の...
-
検便についてです。 便は取れた...
-
白血球が多いとどんな心配があ...
-
中出しをするとお腹が痛い・・・。
-
射精をして1週間以内に尿検査を...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
変な話しになります。尿検査で...
-
これって喉仏ですか? 私は女性...
-
EXCELで条件付き書式で空白セル...
-
男です。昨日の午後3時くらいに...
-
今朝、毎朝の習慣でオナニーし...
-
納豆食べた後の尿の納豆臭は何故?
-
1日前の検尿
-
値が入っているときだけ計算結...
-
精子が黄色?
おすすめ情報