「みんな教えて! 選手権!!」開催のお知らせ

ACCESS2003でリストボックスを作成しました。
複数選択の設定までは出来ました。これを保存するのに
イベントプロシージャでVBAの記述をする必要があるようですが
どのように書いたらよいのかわかりません。

VBAは全くの初心者です。
サンプルコードまたはコードが出ているWEBサイトなどありましたら
教えていただければと思います。

よろしくお願いします。

A 回答 (4件)

ご質問者さんの過去質問において、誰が解決に近かったのかわからないですね。


http://mlab.dyndns.org/okgoo/okgoo.php?id=tarabu …

未来の方が検索をかけ、引っかかったとして有用なものになっているのでしょうか。
(私は全てに対して正解を回答できているわけではありません)
(だからこそ、ご質問者が示してあげる必要があると思います)

前回部分的としていたのは、リストボックスへの表示条件など不明点が多かった。ため。

リストに表示するベースのテーブル構造が、
「国別ID」「地域ID」「好感度」「地域別好感度」「国名」
てな感じになっていたとして
好感度TOP10なり、地域別好感度TOP3なり表示していたとして、
国名を羅列すればいいの、国別IDを羅列すればいいの、
私自身仕様は分からないし、提示された部分で書くしかない。

テーブルの内容をフォームで、といっても
純粋に連結
抽出/絞込みはフォームの機能を使って、非連結的にテキストボックス等を使う
非連結
など実現方法は多様にあります。

なお、#2は、#1のURLの書き換えものと思ってください。
(特に変わったことしているわけではありませんので)
(少しでもURL内のものをやってみるとかされていれば、わかったかも知れません)
(#1の回答してから補足まで2時間ないっていうのも考えもんですね)
(時間があればいいのか、は、わかりません)

他の回答者さんも登場されました。
ご質問者さんのスタンスはどうなってますか。

#3の方が言う > 丸投げもよいところになると    ですか。
(#3の方のは非連結というイメージですね)
    • good
    • 1
この回答へのお礼

回答&コメントありがとうございます。
自宅にはACCESS環境がないので試すことが出来ません。
休み明けに試してからコメントとお礼をさせていただこうと
思っていました。

お礼日時:2009/05/04 00:45

こんな課題が>VBAは全くの初心者です。

がやる課題かな?丸投げもよいところになると思う。以下は今までの経験を動員して、小生がもがいて、やった方法だが、もっとアクセスの操作だけの方法で出来ないか、他の回答を待ちたい。
ーー
質問の「行って見たい」国は、府県に置き換えた例になっている。
ーー
テーブル(レコード記録用)
ID 府県
を作る。
ーーー
テーブル(参照用)
リストボックスのアイテム用のテーブルとして、都道府県テーブルを作り
データは下記を作っておく。
府県コード府県名
11埼玉
12千葉
13東京
14神奈川
ーー
フォ-ム
フォームにリストボックスを貼り付ける。
プロパティで複数選択ー標準に設定
値集合タイプ テーブル/クエリ
値集合ソース SELECT 都道府県.府県名, * FROM 都道府県;
イベントとしては、アイテムをクリックで選択出来る。
ダブルクリックのイベントで、その段階までに、選択したアイテムを取る。
取ったアイテムの文字列はカンマを挟んで連結する。
そして府県テーブルに、VBAでレコードを書き込む。
リストボックスの選択アイテムは次回の入力単位時のために、解除する。
ーー
フォームのイベント
フォームOpenイベント時
府県テーブルを開く。
Private Sub Form_Open(Cancel As Integer)
Set CN = CurrentProject.Connection
rsA.Open "府県", CN, adOpenKeyset, adLockOptimistic
End Sub
ーー
ただし宣言部に
Option Compare Database
Dim CN As New ADODB.Connection
Dim rsA As New ADODB.Recordset
ーーー
フォームCloseイベント時には
府県テーブルを閉じる。
Private Sub Form_Close()
rsA.Close
Set rsA = Nothing
CN.Close
Set CN = Nothing
End Sub
ーーー
リストボックスをダブルクリックしたとき
Private Sub リスト0_DblClick(Cancel As Integer)
v1 = 0
s = ""
With リスト0
For i = 0 To Me.リスト0.ListCount - 1

If Me.リスト0.Selected(i) = True Then
v1 = v1 + 1
s = s & Me.リスト0.ItemData(i) & ","
Me.リスト0.Selected(i) = False

Else
End If
Next
End With
MsgBox s
'-----------------
rsA.AddNew
rsA!府県 = s
rsA.Update
End Sub
府県テーブルのレコードに順次追加してゆく。
===
このフォームは、私はフォーム9と名づけたが、これを開いて
選択する府県名の(複数行可)行をクリックし、ダブルクリクする。フォームを閉じた後にテーブル「府県」を見ると、レコードが追加されているでしょう。
    • good
    • 0
この回答へのお礼

言われるとおり丸投げ状態ですね。
あとこれだけ出来れば完成だったので・・・・。
休み明けに試してみたいと思います。
ありがとうございました。

お礼日時:2009/05/04 00:50

部分的にしか回答できませんので



以下を、ボタンクリック時の処理などに記述してみてください。
リストボックスの名前を「lst00」と仮定します。

  Dim sTmp As String
  Dim vTmp As Variant

  sTmp = ""
  For Each vTmp In Me.lst00.ItemsSelected
    sTmp = sTmp & "," & Me.lst00.Column(0, vTmp)
  Next
  If (Len(sTmp) > 0) Then
    sTmp = Mid(sTmp,2)
  End If

  ' ここで sTmp の中身は複数選択されたもので ,(カンマ) 区切りで作られています。

さて、この後どうしましょうか。

フィールド「行って見たい国名」が連結状態であれば
Me.行って見たい国名 = sTmp
で代入は完了しますので、後はレコードを更新するだけになります。
    • good
    • 0

> どのように書いたらよいのかわかりません


どのような保存するのかわかりません。

リストボックスの活用_複数選択
http://www.accessclub.jp/samplefile/samplefile_1 …

この回答への補足

例えばテーブルのフィールド名は「行って見たい国名」
とします。これをフォームを使って入力する場合に
リストボックスを使って複数選択させます。
アメリカ
カナダ
メキシコ
ブラジル
・・・・
などです。
フォーム上で上記のうち、アメリカとカナダを複数選択したら
テーブル上の該当フィールドに「アメリカ、カナダ」のように
カンマ区切りなどでデータが入るようにしたいと思っています。

補足日時:2009/05/03 16:32
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A