ソフトはACCESS2000です。
フォームでの入力で、リストボックスから複数選択できるようにしているのですが、このリストボックスの値集合ソースに入っている件数が多いため、下にかなりスクロールすることになります。
そこで、リストボックスの右側に別にリストボックスで選択したものを表示させられないかと思っています。
ここでお聞きしたいのは、
1. 表示エリアとしてテキストボックスを作ったのですが、テキストボックスでOKか?
2. 1でOKの場合、リストボックスで選択したものをテキストボックスに表示させる方法
3. 1でOKの場合、そのテキストボックスへ入力できなくする方法(表示ONLYにしたい)
4. 1でだめな場合、別な方法はあるか?あればその方法
です。
回答は、1~3か、1,4になるかと思います。よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

リストボックスのプロパティの更新後処理から[イベントプロシージャ]を


選んで、右に出る ・・・ をクリックしてください。コードはそこに記述します。

ここで「リスト0」はリストボックスの名前、「テキスト2」はテキストボッ
クスの名前です。

Private Sub リスト0_AfterUpdate()

Dim cnt As Integer
Dim dummystr As String

cnt = 0
dummystr = ""

While cnt < リスト0.ItemsSelected.Count
dummystr = dummystr & リスト0.ItemData(リスト0.ItemsSelected.Item(cnt))
dummystr = dummystr & "/"

cnt = cnt + 1
Wend

テキスト2.Value = dummystr

End Sub

この回答への補足

バッチシできました!
ありがとうございました。ただ、欲を言いますと
>dummystr = dummystr & "/"
この辺をどうにかして、縦に並べられる(改行できる)とありがたいのですが。
何とかなりますでしょうか?

補足日時:2002/02/15 15:26
    • good
    • 0

VBA ではどうもテキストボックス内で改行出来ないようなので、


改行して表示したい場合はテキストボックスでなく、こちらも
リストボックスにしたらどうでしょうか?
リスト0が選択するリストボックス、リスト2が表示用のリストボックスです。
(前もってリスト2の値集合タイプを値リストにして下さい。)

Private Sub リスト0_AfterUpdate()

Dim cnt As Integer

If リスト0.ItemsSelected.Count > 0 Then
リスト2.RowSource = リスト0.ItemData(リスト0.ItemsSelected.Item(0)) & ";"
cnt = 1
While cnt < リスト0.ItemsSelected.Count
リスト2.RowSource = リスト2.RowSource & リスト0.ItemData(リスト0.ItemsSelected.Item(cnt)) & ";"
cnt = cnt + 1
Wend
Else
リスト2.RowSource = ""
End If

End Sub
    • good
    • 0
この回答へのお礼

ちょっと今の私には難しすぎます。今回は改行しないで表示することにしました。
わざわざありがとうございました。

お礼日時:2002/02/19 19:39

1.の補足です。


いつのタイミングで、テキストボックスに移すかによりますが、リストの中の項目をダブルクリックで表示させる場合は、リストボックスのDbclick時に先ほどの式を追加してみてください。
    • good
    • 0
この回答へのお礼

リストボックス側のプロパティですね。←こんな初歩的なことも分からずにいました。^^;
ありがとうございました。

お礼日時:2002/02/15 15:23

1. 表示エリアとしてテキストボックスを作ったのですが、テキストボックスでOKか?


OKです。

2. 1でOKの場合、リストボックスで選択したものをテキストボックスに表示させる方法
表示するテキストボックスをFieldname1、リストボックスをFieldListとすると、
Me!FieldName1 = Me!FieldList
でできるはずです。

3. 1でOKの場合、そのテキストボックスへ入力できなくする方法(表示ONLYにしたい)
テキストボックスを使用不可、ロックすればいいと思いますが...。

簡単ですが、参考にしてください。

この回答への補足

回答ありがとうございます。
1つだけ質問追加させてください。
2の「Me!FieldName1 = Me!FieldList」はどこに設定すれば良いですか。(式?の意味は判ります。)

補足日時:2002/02/15 13:09
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qテキストボックスやリストボックスの書式設定

フォームのテキストボックスやリストボックスの書式
設定をVBAでしようと思っているのですが、
複数のオブジェクトの設定を一括して同じ設定にする
方法はありませんか?

今はひとつひとつ↓のように設定してます。

With Me.性別
.TabStop = False 'タブストップ
.BorderStyle = 0 '境界線スタイル
.SpecialEffect = 0 '立体表示
.Locked = True '編集ロック
End With

Aベストアンサー

Dim Ctl As Control

For Each Ctl In Me.Controls
If Ctl.Section = acDetail Then
On Error Resume Next 'エラーを無視

Ctl.TabStop = False 'タブストップ
Ctl.BorderStyle = 0 '境界線スタイル
Ctl.SpecialEffect = 0 '立体表示
Ctl.Locked = True '編集ロック

Err = 0
End If
Next Ctl

この場合は、「詳細部」セクションにある全ての
コントロールの設定を変更します。

QACCESS コンボボックス 抽出 テキストボックスに表示

初めての質問を投稿させていただきます。l
ACCESSのVBAにて分からないことがあるので、
質問を投稿させていただきました。

以下のようなテーブルがあります。
名称:番号:管理番号:価格
cake|NO.1|C1|200
cake|NO.2|C2|200
chocolate|NO.1|C3|300
chocolate|NO.2|C4|300
chocolate|NO.3|C5|300
cookie|(空白)|C6|100
フォーム上に、コンボボックスが二つ設置されており
最初のコンボボックスでは、cake、chocolate、cookieを選択することができます。
また、二つ目のコンボボックスでは最初のコンボボックスで選択した名称に対する番号を選ぶことが出来ます。
------------------以下が疑問点です-------------------------
このフォームにはそれ以外にテキストボックスが設定されています。
名称と番号を設定した後に管理番号(重複なし)をテキストボックスに表示。
その後、管理番号を元に価格もテキストボックスに表示したいと考えておりますが、どのようなプログラムを組めばよろしいでしょうか?

初めての質問を投稿させていただきます。l
ACCESSのVBAにて分からないことがあるので、
質問を投稿させていただきました。

以下のようなテーブルがあります。
名称:番号:管理番号:価格
cake|NO.1|C1|200
cake|NO.2|C2|200
chocolate|NO.1|C3|300
chocolate|NO.2|C4|300
chocolate|NO.3|C5|300
cookie|(空白)|C6|100
フォーム上に、コンボボックスが二つ設置されており
最初のコンボボックスでは、cake、chocolate、cookieを選択することができます。
また、二つ目のコンボボックスでは最初のコン...続きを読む

Aベストアンサー

> なぜ、連結列列を2としたか、考えてみてください。

大事なところは2度言いましたよ。。。 は冗談ですが


> (ご質問から想定される私の中での考える動きは確認したつもりでおりますが、意図と違っていましたらごめんなさい)

何か日本語になっていないですね


(ご質問から、・・・私の中で想定した動きは確認したつもりでおりますが、意図と違っていましたらごめんなさい)

まだ日本語化になってないですかね。

Q(ACCESS)条件に応じて、テキストボックスを表示・非表示設定

(ACCESS)条件に応じて、テキストボックスを表示・非表示設定

フォーム上のテキストボックスAを条件に応じて表示・非表示にさせたいです。


条件は、サブフォームのテキストボックスBに「支払」を言う文字があれば、
テキストボックスAが表示され、なければ非表示にする方法が探しています。

わからないなりに調べて、多分以下の文章になると思いますが、「?」の条件式がうまくいきません

Private Sub AA_GotFocus()
If  ????? Then
Me!テキストボックスA.Visible = False
Else
Me!テキストボックスA.Visible = True
End If
End Sub


どなたか教えてください。
宜しくお願い致します。

Aベストアンサー

訂正。(2)のところで、

Private Sub t1_GotFocus()
If Forms!フォーム名!ctlサブフォーム名!テキストボックスB Like "*" & "支払" & "*" Then

になっていましたが、


Private Sub t1_GotFocus()

を、

Private Sub AA_GotFocus()

としてください。書き間違いです。

Qaccessでのリストボックス選択のイベント

お世話になります。

度々で恐縮なのですが、以下の質問を
よろしくお願いいたします。

accessのフォーム上にリストボックスとテキスト
ボックスをはりつけ、リストボックスに表示されて
いる行が選択されたら、その項目値をテキスト
ボックスに表示させようとしています。

しかし、リストボックスのイベント(マウスボタン
クリック時や開放時)を使ってみたのですが、
二度クリックしないとテキストボックスに表示され
ません。

リストボックスの行が選択されたというイベントが
あればいいのですが、見当たりません。

どうすれば、リストボックスで行が選択されたという
イベントを捕まえることができるのかご教示お願い
いたします。

Aベストアンサー

更新後処理で拾えませんか?

Qアクセスのリストボックスの複数選択

リストボックスの設定方法を教えてください。

1画面目にテーブルと連結したリストボックスがあります。
複数選択した情報をSelectedプロパティで取得しています。

次画面にて同じテーブルに連結されているリストボックスを
1画面目と同じ様に選択されている状態にしたいのですが、
方法がわかりません。
選択されている内容だけをリストボックスに表示する方法は
見つけたのですが、同じ状態で選択される方法がわかりません。
ご回答、宜しくお願いします。

Aベストアンサー

> 同じテーブルに連結されているリストボックス

とのことですが、ご質問のケースでは、必要な情報はリストボックスの値集合
ソース(RowSource)が同じかどうかだと思います。
(例えば、一方のRowSourceがTableA、他方のRowSourceがTableAを元に
 並べ替えだけ行ったQueryA、といった場合は、Selectedプロパティでは
 対応できないと思いますので・・・)

ですので、とりあえず、
 ・2つのリストボックスのRowSourceは共通
 ・1画面目の名前は「MF1」、2画面目は「MF2」
 ・1画面目のリストボックスは「LB1」、2画面目は「LB2」
 ・2画面目をアクティブにした時点で、1画面目での選択を反映
という前提で回答させて戴きます。

Private Sub Form_Activate()
On Error GoTo エラー処理

Dim FName As String, CName(1 To 2) As String
Dim Frm As Form, Cntl(1 To 2) As Control
Dim ItmCnt As Integer, i As Integer

'以下の3つの変数への代入値を、実際のフォーム名・コントロール名に
'してやれば、他の部分のコードは変更不要(のはず・・・)
FName = "MF1"       '1画面目のフォーム名
CName(1) = "LB1"     '1画面目のリストボックス名
CName(2) = "LB2"     '2画面目のリストボックス名

Set Frm = Forms(FName)
Set Cntl(1) = Frm.Controls(CName(1))
Set Cntl(2) = Me.Controls(CName(2))
ItmCnt = Cntl(1).ListCount - 1

For i = 0 To ItmCnt
Cntl(2).Selected(i) = Cntl(1).Selected(i)
Next

終了処理:
Set Frm = Nothing
Set Cntl(1) = Nothing
Set Cntl(2) = Nothing
Exit Sub

エラー処理:
MsgBox Err & ":" & Error$, , Me.Name & " Activate"
Resume 終了処理

End Sub


以上のコードを2画面目のフォームの「アクティブ時」のイベントに記述して
やれば、2画面目に切り替えたときに、1画面目での選択が反映されると
思います。

・・・ようするに、Selectedプロパティは参照・編集とも可能なので、片っ端
からベタで代入してしまいました、というわけです(汗)
なので、このやり方だと、2画面側がアクティブになる際には必ず1画面目も
開かれている必要があります。
1画面目を閉じたいようでしたら、
 a)配列変数に一旦記録してから2画面目で書き戻してやるか、
 b)2画面目でのコード記述場所を「開くとき(Open)」にして、「For ~ Next」を
 終えた後に2画面目側から1画面目を閉じてやるようにする、
といったような変更をして下さい。

> 同じテーブルに連結されているリストボックス

とのことですが、ご質問のケースでは、必要な情報はリストボックスの値集合
ソース(RowSource)が同じかどうかだと思います。
(例えば、一方のRowSourceがTableA、他方のRowSourceがTableAを元に
 並べ替えだけ行ったQueryA、といった場合は、Selectedプロパティでは
 対応できないと思いますので・・・)

ですので、とりあえず、
 ・2つのリストボックスのRowSourceは共通
 ・1画面目の名前は「MF1」、2画面目は「MF2」
 ・1画面目のリストボック...続きを読む


人気Q&Aランキング

おすすめ情報