質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

774閲覧

Accessでのコンボボックス内のテキストに変数を割り当てたい

oze

総合スコア14

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2018/07/20 05:48

### postgresDBとAccessをODBCドライバ接続し、マスタをメンテナンスするツールとしてAccessでフォームを作成しています。
メンテナンスを行うマスタが3つあり、それぞれに新規作成、更新・削除フォームを作成しています(計6つ)。作成したフォームを大元となるフォームの詳細欄にタブコントロールで分けて貼ってあります。
大元フォームのページフッダーに新規登録コンボボックス、更新・削除コンボボックス、表示ボタンが設置してあり、コンボボックスの中身はそれぞれマスタテーブル名が3つ入っています。
コンボボックスでマスタ名を選び、選んだ条件に応じて表示ボタンを押すとsetFocusでそれぞれのタブに移動するという構築を考えております。
コンボボックスの中のテキストに変数を当てて、その変数の値に応じて表示ボタンでsetFocusを当てるタブを選ばせる位しか思い浮かばないのですが、思うようにうまくいきません。
何かいい別の方法、またはVBAの記述を教えていただけないでしょうか?

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

タブコントロールにページが6つあり、それぞれのページにサブフォームが配置してあるということですね。タブコントロールのタブにマスタ名と追加か更新かわかるようなキャプションをつけておけば済む話だと思いますが、それではだめなんですか。ダメな理由を提示してもらえれば、別案のアドバイスでできるかもしれません。

ダメな理由があるとして、コンボボックスが2つ、表示ボタンがひとつだと、表示ボタンを押したとき、どちらのコンボボックスに対応するフォームを表示させるのでしょうか。ユーザーインターフェイスとして紛らわしい仕様だと思います。検討の余地があると思います。

とりあえず、ComboBox.ListIndex プロパティ (Access)で何番目を選択しているか取得てきますので、それをもとにタブコントロールのページを選択すればいいでしょう。

タブコントロールの1ページ目を選択するにはValueプロパティに0を代入、2ページ目を選択するにはValueプロパティに1を代入すればOKです。

追記

コンボボックスを下記のような2つにすればいいですね。

マスター名選択コンボ

新規追加、更新・削除選択コンボ

後者はコンボではなくオプショングループの方が分かりやすいかも。

タブコントロールの各ページが、下記の順。

マスター1新規、マスター1更新、マスター2新規、マスター2更新、マスター3新規、マスター3更新

マスター名選択コンボのリストが、
マスター1
マスター2
マスター3

更新・削除選択コンボのリストが、
新規追加
更新・削除

として、表示ボタンクリック時のイベントプロシージャのコード

vba

1Private Sub 表示_Click() 2 3 Me.タブ1.Value = Me.マスター名選択.ListIndex * 2 + Me.更新・削除選択.ListIndex 4 5End If

投稿2018/07/20 10:40

編集2018/07/20 10:57
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oze

2018/07/23 01:37 編集

回答ありがとうございます。 今現状の仕様がこうなっております。 ヘッダー 新規:マスタ名コンボ   更新/削除:マスタ名コンボ      表示ボタン        表示ボタン 詳細 ------------------------------------------------------------- タブコントロール1~6 hatenaさんの回答を参考にし、VBAの記述を行っておりますがうまくいかないです。。 間違っているとは思うのですが、どこが間違っているかがわからず迷走状態です。 VBA Private Sub 表示1_Click() Me.タブ1.Value = Me.新規コンボ.ListIndex * 1 End Sub 何度も質問してしまい申し訳ございません。 助力頂ければと思います。 また、1つの表示ボタンにつき選択肢が3つ(新規タブ1.新規タブ2.新規タブ3) あるのですが、select caseを使えば条件分岐できるのでしょうか?
oze

2018/07/23 04:42

hatenaさん、回答本当にありがとうございました。 「Me.タブ1.Value」の「タブ1」をタブコントロール内のタブ1だと勘違いしており、 タブ1をタブコントロールの名前に記述を変えたところ上手くいきました。 更新削除コンボの表示ボタンのVBAの記述も「Me.タブ.Value = Me.更新削除コンボ.ListIndex + 3」と記述したところ上手くいきました(マスタのこれ以降の追加はないので+3でも案件上問題はない)。 この度は回答して頂き誠にありがとうございました。 本当に助かりました。
hatena19

2018/07/23 05:24

解決されたとのことですので、蛇足かもしれませんが、 そのUIの仕様はよくないと思います。 コンボボックスが2つあり、それぞれにマスター名が表示されているわけですが、 それては、タブコントロールに表示されているのは、どちらのマスターなのか、 ぱっとみて判別がつきません。 さらに、タブコントロールの方でページを切り替得ることもできますので、 コンボボックスとタブコントロールのページがまったく一致していないという状況も 発生します。 タブの標題をみれば分かるということなら、 わざわざ別にコンボボックスを用意する必要はないですよね。 タブの標題では狭くてみにくいということなら、 マスター名選択コンボ、新規・更新選択コンボの2つだけにして、 それぞれのコンボボックスで選択したら、即、タブコントロールに反映するような 仕様にすべきだと思います。(コンボの更新後処理にページ切り替えのコードを記述する。) 表示ボタンで反映するようにすると、コンボの表示とタブコントロールが一致しない状況が発生します。 さらに、タブコントロールのページを変更した時、それがコンボボックスにも反映するようにします。 (タブコントロールの「変更時」イベントを使用) これなら、常にコンボボックスとタブコントロールは一致します。
oze

2018/07/23 08:13

タイピングができる程度のスキル保有者がマスタメンテを行えるツールの開発となっておりまして、タブを自分で選んで切り替えを行うというのはNGらしいのです。。 今のUI上、メンテナンスを行う方がタブを自分で選んで切り替えてしまうと順番にずれが生じてしまうという認識でお間違いないでしょうか? コンボボックスで選んだものがそのまま反映されるのではなく、ボタンなどでワンクッション挟んでほしいとのことなので表示ボタンは外せないものでして、私の説明不足で申し訳ございません。 別提案ありがといございました、タブの意味がなくなってしまいますがタブ名を表示させないように努力してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問