- ベストアンサー
アクセスVBAについて
"問題数フォーム"というフォームに国語、社会、数学、英語、理科テキストボックスが5個あります。別に得点入力フォームが各教科ごとにあります。で、各教科のフォームにはそれぞれ第1問から第5問までの得点を入力するようになってます。で、例えば問題数フォームの国語に4と入力すれば国語の得点入力フォームの第1問から第4問までを表示して、第5問を非表示にするということをVBAで記述したいんですが、どのようにすればいいのかわかりません。教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
VBAで判定させたいんですよね? ちとわかりにくい部分もあるのですが、 >問題数フォームの国語に4と入力すれば国語の得点入力フォームの第1問から第4問までを表示して、第5問を非表示にする 問題数フォームの国語テキストボックスのチェンジイベント内に判定文を書き込めばいいんじゃないでしょうか。 例) -------------------------------------------- 国語の得点入力フォーム.第1問.visible=false 国語の得点入力フォーム.第2問.visible=fasle 国語の得点入力フォーム.第3問.visible=fasle 国語の得点入力フォーム.第4問.visible=fasle 国語の得点入力フォーム.第5問.visible=fasle select case 国語.txt case 1 国語の得点入力フォーム.第1問.visible=true case 2 国語の得点入力フォーム.第1問.visible=true 国語の得点入力フォーム.第2問.visible=true case 3 国語の得点入力フォーム.第1問.visible=true 国語の得点入力フォーム.第2問.visible=true 国語の得点入力フォーム.第3問.visible=true case 4 国語の得点入力フォーム.第1問.visible=true 国語の得点入力フォーム.第2問.visible=true 国語の得点入力フォーム.第3問.visible=true 国語の得点入力フォーム.第4問.visible=true case 5 国語の得点入力フォーム.第1問.visible=true 国語の得点入力フォーム.第2問.visible=true 国語の得点入力フォーム.第3問.visible=true 国語の得点入力フォーム.第4問.visible=true 国語の得点入力フォーム.第5問.visible=true case else msgbox "1~5を入力して下さい",vbExclamation+vbOkonly end select -------------------------------------------- select case文じゃなくて、単純にif文を5回繰り返してもいいかも。
その他の回答 (4)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
#1且つ#3です。 今見てびっくり。 [TBL_問題]が二つあるのに気づきました。 修正です。 ・2テーブルをマスタ [TBL_MST_生徒] [TBL_MST_科目] ・2テーブルをワーク [TBL_問題] [TBL_問題] → [TBL_得点]でした。
私も#3さんのおっしゃる方法のほうがいいと思います(正統的)。が、それだけ ではなんなので、一応ご質問の答えとして基本的な部分だけ作ってみました。 仕様は詳しいことがわからないので適当に決めてます。 [仕様] * フォームは「問題数フォーム」と「国語得点入力フォーム」 *「 問題数フォーム」には「txt国語問題数」、「txt社会問題数」(以下、数 学、英語、理科)という5個のテキストボックスがある *「 国語得点入力フォーム」には「txt国語得点1」~「txt国語得点5」という 5個のテキストボックスがある * 「問題数フォーム」の「txt国語問題数」に数値(1~5)を入力し、「国語得 点入力フォーム」を開くと、問題数に応じて「txt国語得点1」~「txt国語 得点n」までを表示する [コード] Private Sub Form_Load() Dim i As Integer Dim num As Integer num = Form_問題数フォーム.txt国語問題数.Text '最初は全部非表示にする For i = 1 To 5 Me.Controls("txt国語得点" & i).Visible = False Next 'txt国語得点1からtxt国語得点nまでを表示 For i = 1 To num Me.Controls("txt国語得点" & i).Visible = True Next End Sub [補足] エラー処理は何もしてません。たとえば、txt国語問題数が空だとエラーにな ります。 Access2000で書いたので、バージョンが違うとエラーになるかもしれません。
お礼
ありがとうございました。参考にさせていただきます。
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
氏名、国語1、国語2、・・・、国語5、社会1、社会2、・・・、理科5 となっているのですね? 私はやっと理解しました。#2さんは、あなたの質問を理解したみたいですね。私の国語力が無いせいですね^^; テーブル構造にある、科目の番号の数だけ、テキストボックスを作成しているということであれば、#2さんの言われている通り Textbox.Visible = [True/Falseのどっちか] で、表示/非表示が切り替えることができます。 ここからは、質問と無関係になってしまいますが、構造的には、あまり良くないように思います。 (独り言だと思ってもらっても構いません) 問題が5問限定ですよね? テーブル構造を以下のよう細分化すると、問題数も限定することも無いので、後々発展ができると思いますよ。 (ここの掲示板って、図がヅレルので、以下の文をメモ帳にコピペしてもらうと、わかり易いと思います。) -------------------------------- ・2テーブルをマスタ [TBL_MST_生徒] 生徒ID 数値型(KEY) 生徒氏名 テキスト型 [TBL_MST_科目] 科目ID 数値型(KEY) 科目名 テキスト型 ・2テーブルをワーク [TBL_問題] 科目ID 数値型(KEY) 問題番号 数値型(KEY) 問題文 メモ型 [TBL_問題] 生徒ID 数値型(KEY) 科目ID 数値型(KEY) 問題番号 数値型(KEY) 得点 数値型 -------------------------------- 生徒数はもちろん、問題も科目も好きに増減可能な構造です。 しかも教化毎にフォームを作成しているのですよね? それも、1フォームに収めることも可能です。 ┌設問一覧フォーム─────────────────┐ │ │ │ ≪絞込み条件入力ヘッダ部≫ │ │ [科目選択エリア] [設問番号入力エリア] │ │ 【上記は例ですが、生徒IDで絞ったりも可】 │ │ │ ├─────────────────────────┤ │科目名 問題番号 問題文 │ ├─────────────────────────┤ │社会 1 1192造ろう鎌倉○府 │ │社会 2 794うぐ○す平安京 │ │社会 3 平安京エイリ○ン │ │・・・・・・・・・・・・・・・・・・・・・・・・・│ │算数 ∞ あなたの生年月日は? │ │・・・・・・・・・・・・・・・・・・・・・・・・・│ └─────────────────────────┘ さらに、個人成績の一覧作成も、容易になると思います。 ┌個人得点フォーム─────────────────┐ │ │ │ ≪絞込み条件入力ヘッダ部≫ │ │ [科目選択エリア] [設問番号入力エリア] │ │ 【上記は例ですが、生徒IDや得点で絞ったりも可】 │ │ │ ├─────────────────────────┤ │科目名 問題番号 生徒ID/生徒氏名 得点 │ ├─────────────────────────┤ │国語 1 1 ああああ 10 │ │国語 1 2 いいいい 4 │ │国語 2 1 ああああ 9 │ │・・・・・・・・・・・・・・・・・・・・・・・・・│ │算数 ∞ ∞ 無限 大君 -∞ │ │・・・・・・・・・・・・・・・・・・・・・・・・・│ └─────────────────────────┘
お礼
ありがとうございます。普段はExcelで作業を行っているので、どうしても構造がExcelっぽくなってしまいます。とても参考になりました。
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
フォームのレコードソースを、更新してあげればできると思いますが、質問内容が漠然とし過ぎていて、アドバイスしづらいです。 >別に得点入力フォームが各教科ごと >問題数フォームの国語に4と入力すれば国語の得点入力フォームの第1問から第4問までを表示 現在は、その[点数入力フォームfor国語]は、問題の絞込みを行わない状態であれば、表示しているのでしょうか? もしそれが出来ているのであれば、現在のフォームのレコードソースはどのようになっているのでしょうか? 可能であれば、、、 関連テーブル情報やその構造も公開することも大事ですよ。
補足
アクセスのことがまだまだ分からないことばかりなので、質問するのも難しいです。DATAテーブルを作っていて、この中に番号、氏名、国語1、国語2、・・・、国語5、後の教科も同様に1から5までのフィールドがあります。で、国語の入力をフォームで行おうとしています。問題数がテスト毎に変わるので、それで余分な入力枠を非表示にできればと考えてます。今は、全ての入力枠が表示されている状態です。
補足
ありがとうございました。参考にさせていただきます。 ところで、 select case 国語.txt の部分がよくわからないんですが・・・ 国語.txtで、テキストボックスの値が取得できるんでしょうか。