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

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

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

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

Access

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

Q&A

解決済

1回答

6455閲覧

コンボボックスのイベントについて

napoleon

総合スコア18

VBA

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

Access

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

0グッド

0クリップ

投稿2018/05/31 01:01

編集2018/05/31 01:36

コンボボックスのイベントについて質問させていただきます。
イメージ説明

発注を行うためのフォームを作成しています。
仕入先、品目ともに複数あり、コンボボックスで選択しサーチボタンをクリックすると
その品目の規格が表示される仕様にしています。
仕入先で品目を変更した場合、一度規格もクリアにしたいのでイベントで『変更時』にVBAを設定しています。

同様に同じ仕入先で品目を変更した場合も規格の表示をクリアにしたいので品目のコンボボックスに同様のVBAを設定しました。「Private Sub コンボ品目_Change()」

ブレークポイントを設定して、品目を変更した場合にVBAを通るか見てみましたが、このVBAは通過していませんでした。
イメージ説明

ご教示宜しくお願い致します。

Private

1 2 If IsNull(Me!KIKAKU_1) = True Then 3 Me.KIKAKU_1.Visible = False 4 Me.ラベル_1.Visible = False 5 Me.カケ_1.Visible = False 6 Me.LOT_1.Visible = False 7 End If 8 9 If IsNull(Me!KIKAKU_2) = True Then 10 Me.KIKAKU_2.Visible = False 11 Me.ラベル_2.Visible = False 12 Me.カケ_2.Visible = False 13 Me.LOT_2.Visible = False 14 End If 15 16 If IsNull(Me!KIKAKU_3) = True Then 17 Me.KIKAKU_3.Visible = False 18 Me.ラベル_3.Visible = False 19 Me.カケ_3.Visible = False 20 Me.LOT_3.Visible = False 21 End If 22 23 If IsNull(Me!KIKAKU_4) = True Then 24 Me.KIKAKU_4.Visible = False 25 Me.ラベル_4.Visible = False 26 Me.カケ_4.Visible = False 27 Me.LOT_4.Visible = False 28 End If 29 30 If IsNull(Me!KIKAKU_5) = True Then 31 Me.KIKAKU_5.Visible = False 32 Me.ラベル_5.Visible = False 33 Me.カケ_5.Visible = False 34 Me.LOT_5.Visible = False 35 End If 36 37 If IsNull(Me!KIKAKU_6) = True Then 38 Me.KIKAKU_6.Visible = False 39 Me.ラベル_6.Visible = False 40 Me.カケ_6.Visible = False 41 Me.LOT_6.Visible = False 42 End If 43 44 If IsNull(Me!KIKAKU_7) = True Then 45 Me.KIKAKU_7.Visible = False 46 Me.ラベル_7.Visible = False 47 Me.カケ_7.Visible = False 48 Me.LOT_7.Visible = False 49 End If 50 51 Me!LOT_1 = Null 52 Me!LOT_2 = Null 53 Me!LOT_3 = Null 54 Me!LOT_4 = Null 55 Me!LOT_5 = Null 56 Me!LOT_6 = Null 57 Me!LOT_7 = Null 58 59 Me!F_履歴.Form.Visible = False 60 Me.Refresh 61コード

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

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

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

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

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

coco_bauer

2018/05/31 01:16

Private Sub コンボ品目_Change()など、質問に示されていないコードがあると思われます。コードを示さずに回答が得られるとお思いですか?? 「動いてくれません。ブレークポイントで止めてみたのですが抜けてしまっています」というのも何が起きたのか理解できません。
m.ts10806

2018/05/31 01:22

プログラムコード(およびエラーメッセージ)は質問内容としては最も重要な部分であるため、見やすくしていただけると助かります。<code>ボタン押下→「コード」部分にコードを貼り付け→「ここに言語を入力」に対象言語名記入(エラーメッセージの場合は不要)の手順で「コードハイライト化」してください。(質問編集画面ではリアルタイムでプレビューが表示されるので見ながら調整してください)
guest

回答1

0

ベストアンサー

まず、イベントは、Changeイベントではなく、AfterUpdateイベントにしましょう。
Changeイベントだと、キーボードで一文字ずつ入力したり削除したりで反応してしまいます。

あと、
If IsNull(Me!KIKAKU_1) = True Then
というような条件は不要では。これだと、空欄以外のときには反応しなくなります。

同じようなコードの繰り返しは、ループを使ってシンプルに記述できます。

vba

1Private Sub コンボ品目_AfterUpdate() 2 Dim i as Long 3 4 For i = 1 to 7 5 Me("KIKAKU_" & i).Visible = False 6 Me("ラベル_" & i).Visible = False 7 Me("カケ_" & i).Visible = False 8 Me("LOT_" & i).Visible = False 9 Me("LOT_" & i).Visible = Null 10 Next 11 12 Me!F_履歴.Form.Visible = False 13End Sub

投稿2018/05/31 02:14

hatena19

総合スコア33715

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

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

napoleon

2018/05/31 02:35

ありがとうございました!きちんとできました。 ループのご指摘もありがとうございます。全体がスッキリとしました。 またご教示いただきますようお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問