内容が変化するリストボックスの設置方法 †
ページ | OpenOffice.org FAQの登録ページ |
---|---|
投稿者 | nagcup |
分類 | |
優先順位 | |
状態 | |
カテゴリー | |
投稿日 | 2009-08-21 17:37:20 (金) |
OS | Windows XP |
依存するページ | |
バージョン |
メッセージ †
回答ページでは行末に「~」を付加する必要はありません |
経費処理のデータベースを考案中の初心者です。リストボックスでデータ入力の効率化を図りたいと考えています。
たとえば、「会費」「会議費」「旅費交通費」「交際費」を表示するリストボックスで「旅費交通費」を選択するともうひとつのリストボックスには「日当」「乗車船費」「定期券」が表示され、「交際費」を選択すると「お歳暮」「慶弔費」「飲食費」が表示されるというように、他のリストボックスの値に連動して表示内容が更新されるリストボックスを設置したいと思っていますがその方法がわかりません。どなたかご教示いただけないでしょうか。
なお、単純なリストボックスなら設置して利用しております。
たぶんマクロで実現することに †
M.Kamataki (2009-08-23 18:18:41 (日))
旅費の科目を入力するフィールドの値で、旅費の種類を抽出したリストをリストボックスの値としたいということで良いですよね。
Accessだとフォーム上のコントロールの値をクエリーに食わせることができるんですが、Baseだとマクロで実現することになると思います。
たぶん以下のサイトのマクロの応用でいけるんじゃないかと思います。ただ、以下のサイトの例では、リストを作成するキーとして考えられているコントロールがテキストボックスなんですね。ご質問ではリストボックスということなので、コードをそのまま流用しただけでは動作しませんね。
OpenOfficeのプログラミング:コンボボックスのリストを変更
http://samakui.at.webry.info/200810/article_2.html
また、表示されているリストの値ではなく、コード番号の入力部分も新しく考えないといけないと思います。もう少し、調べないといけませんね。
リストボックスの項目を追加/削除するマクロ †
nagcup (2009-08-24 10:34:01 (月))
Kamatakiさん。そういうことです。念のため、test2.odbのフォーム「経費処理」でリストボックスを設けました。このうち「subAcct」リストボックスが項目を絞り込めないまま表示されるのが不満なのです。
教えていただいた参考マクロで私が取り組まなければならない作業はよく理解できました。また、不可能ではないこともわかり安心しました。しかし、コンボボックスとリストボックスは構造が違うようで、参考マクロだけが手がかりでは私の力では難しそうです。せめて、リストボックスの表示項目を削除したり追加したりあるいはリニューアルするマクロのサンプルがあれば助かります。
私の要望はリストボックスを扱う上で必然的に生じる問題でありますのでサンプルはいろいろある筈と思うわけです。
たたき台 †
M.Kamataki (2009-08-24 23:37:51 (月))
リストを作成するキーとして考えられているコントロールがリストボックスではなくコンボボックスなら値を取得できるようです。ということでたたき台のサンプルを上げておきます。
faq5_10sample_1.odb
ただ、もうひとつの課題「表示されているリストの値ではなく、コード番号の入力部分も新しく考えないといけない」は実現できていません。コード入力ができないので、テーブル自体の設計をテキストフィールドに変えています。
とりあえず、フォームとしてはこんな感じのものを作成したいということで良いですね。
別の実現方法 †
M.Kamataki (2009-08-25 18:07:33 (火))
>私の要望はリストボックスを扱う上で必然的に生じる問題でありますのでサンプルはいろいろある筈と思うわけです。
コード番号で入力できるサンプルがありました。「たたき台」のサンプルとは別の実現方法になっています。
Multiple option forms
http://markmail.org/message/yref72liw44mrigs
サンプルを公開されたのはDrew Jensenさんで、OOoForumやThe OpenOffice.org Community Forumでも、様々なサンプルを公開されている方です。いわば「最終兵器」みたいな方。
彼のサンプルでは、経費の種類を選択するリストボックスは「非連結コントロール」にしており、テーブルには入力しません。したがってexpenseテーブルには「account」フィールドがありません。「subAcct」フィールドには国際会費などの科目コードが入力されます。これでも経費一覧の「acctName」フィールドはリレーションで工夫すれば、nagcupさんのサンプルと同じように「acctName」フィールドを表示できます。
以下にサンプルを添付します。
faq5_10sample_2.odb
コードは以下のようになります。sub ListBoxChange( oEv as object ) dim sSelectedItem dim accountCombo dim subAcctCombo dim aryStrings(0) as string dim iAcctCode sSelectedItem = oEv.Source.SelectedItem accountCombo = oEv.Source.Model subAcctCombo = accountCombo.Parent.getByName("subAcct" ) if sSelectedItem = "会費" then iAcctCode = 1 elseif sSelectedItem = "会議費" then iAcctCode = 2 elseif sSelectedItem = "旅費交通費" then iAcctCode = 3 elseif sSelectedItem = "交際費" then iAcctCode = 4 end if aryStrings(0) = "SELECT ""subName"", ""subCode"" FROM ""acctSubTable"" WHERE ""acctCode"" = " + iAcctCode subAcctCombo.ListSource = aryStrings subAcctCombo.refresh end sub「経費処理」フォームの「accont」リストボックスのイベント「ステータスを変更した時」に割り当てます。
>リストボックスの表示項目を削除したり追加したりあるいはリニューアルするマクロのサンプルがあれば助かります。
この件に関しては、「たたき台」のサンプルのほうが容易ですね。リストボックスの一覧はテーブルで管理できます。新しいサンプルでは、マクロも変更する必要があります。
ようし、勉強するぞ †
nagcup (2009-08-25 20:40:29 (火))
Kamatakiさん、ありがとうございます。
私はシニアのボランティア団体に属しておりまして、そこの会計をなんとかしようと考えている者です。
昔はaccessを少しはかじったこともあるのですが、何分シニア、頭がなかなかついて来てくれません。そんな私のおんぶにだっこのお願いにかゆい所に手のとどく対応をしていただき、大変ありごとうございます。
只今、sample1を勉強しております。sample2まで手がまわっておりません。また、一両日旅行に出かけますのでご返事は少し遅れるかと思いますが、必ず返事させていただきます。
とりあえず、御礼まで。
いったん完了にします †
M.Kamataki (2009-08-26 10:12:14 (水))
方向性が見えたので、いったん完了にします。
マクロを組む上で気をつける点を整理しておきます。
- 連結コントロールと非連結コントロール
テーブルのフィールドに値を書き込む動作をするのが「連結コントロール」、単に表示のみで、テーブルとは連結していないものが「非連結コントロール」。2段目のリストボックスの内容を絞り込むために用意する1段目のリストボックスは「非連結コントロール」にする必要がある。- リストボックスとコンボボックス
リストに表示された値と関連するコードをテーブルのフィールドに挿入する場合は「リストボックス」を使用する。対して「コンボボックス」を使用した場合は、リストに表示された値がテーブルのフィールドに挿入される。
上記はBaseの動作からまとめたものです。もし間違いがありましたら、ご指摘してください。このようなコントロールの扱いはAccessでも同じかもしれません。Accessに詳しい方のご意見もお願いします。
なお、「完了」後も関連するコメントがあれば書き込みOKです。
関連するIssue †
M.Kamataki (2009-08-26 11:13:11 (水))
faq/4/934「フォーム上のデータをクエリーの条件に出来ますか」で、OpenOffice.orgの不具合・要望データベースであるIssueTrackerに登録されている以下のIssueを紹介しています。
Filtering form records by using an unbound control on the form
http://ja.openoffice.org/issues/show_bug.cgi?id=75436
この要望が実現すると、BaseもAccess並みの使いやすさになると思います。「当サイトの使い方/不具合・要望を出す」の「5.実装を待ちます。」を参考に、この課題に関心のある方は投票やCCをお願いします。