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

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

ただいまの
回答率

90.50%

  • VBA

    1799questions

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

  • Access

    431questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 149

oze

score 5

 postgresDBとAccessをODBCドライバ接続し、マスタをメンテナンスするツールとしてAccessでフォームを作成しています。

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

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

エラーメッセージ

 該当のソースコード

ソースコード

 試したこと

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

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

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

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

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

追記

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

マスター名選択コンボ

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

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

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

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

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

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

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

Private Sub 表示_Click()

    Me.タブ1.Value = Me.マスター名選択.ListIndex * 2 + Me.更新・削除選択.ListIndex

End If

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/23 10:34 編集

    回答ありがとうございます。

    今現状の仕様がこうなっております。

    ヘッダー 新規:マスタ名コンボ   更新/削除:マスタ名コンボ
         表示ボタン        表示ボタン
    詳細 -------------------------------------------------------------
    タブコントロール1~6

    hatenaさんの回答を参考にし、VBAの記述を行っておりますがうまくいかないです。。
    間違っているとは思うのですが、どこが間違っているかがわからず迷走状態です。

    VBA
    Private Sub 表示1_Click()

    Me.タブ1.Value = Me.新規コンボ.ListIndex * 1

    End Sub

    何度も質問してしまい申し訳ございません。
    助力頂ければと思います。

    また、1つの表示ボタンにつき選択肢が3つ(新規タブ1.新規タブ2.新規タブ3)
    あるのですが、select caseを使えば条件分岐できるのでしょうか?

    キャンセル

  • 2018/07/23 13:42

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

    キャンセル

  • 2018/07/23 14:24

    解決されたとのことですので、蛇足かもしれませんが、
    そのUIの仕様はよくないと思います。

    コンボボックスが2つあり、それぞれにマスター名が表示されているわけですが、
    それては、タブコントロールに表示されているのは、どちらのマスターなのか、
    ぱっとみて判別がつきません。
    さらに、タブコントロールの方でページを切り替得ることもできますので、
    コンボボックスとタブコントロールのページがまったく一致していないという状況も
    発生します。
    タブの標題をみれば分かるということなら、
    わざわざ別にコンボボックスを用意する必要はないですよね。

    タブの標題では狭くてみにくいということなら、
    マスター名選択コンボ、新規・更新選択コンボの2つだけにして、
    それぞれのコンボボックスで選択したら、即、タブコントロールに反映するような
    仕様にすべきだと思います。(コンボの更新後処理にページ切り替えのコードを記述する。)
    表示ボタンで反映するようにすると、コンボの表示とタブコントロールが一致しない状況が発生します。
    さらに、タブコントロールのページを変更した時、それがコンボボックスにも反映するようにします。
    (タブコントロールの「変更時」イベントを使用)

    これなら、常にコンボボックスとタブコントロールは一致します。

    キャンセル

  • 2018/07/23 17:13

    タイピングができる程度のスキル保有者がマスタメンテを行えるツールの開発となっておりまして、タブを自分で選んで切り替えを行うというのはNGらしいのです。。

    今のUI上、メンテナンスを行う方がタブを自分で選んで切り替えてしまうと順番にずれが生じてしまうという認識でお間違いないでしょうか?

    コンボボックスで選んだものがそのまま反映されるのではなく、ボタンなどでワンクッション挟んでほしいとのことなので表示ボタンは外せないものでして、私の説明不足で申し訳ございません。
    別提案ありがといございました、タブの意味がなくなってしまいますがタブ名を表示させないように努力してみます。

    キャンセル

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

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • VBA

    1799questions

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

  • Access

    431questions

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