Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


799 / 2272 ツリー ←次へ | 前へ→

【10056】うまく値を取得できないのですが・・。 あおぎん 07/12/5(水) 9:54 質問[未読]
【10057】Re:うまく値を取得できないのですが・・。 VBWASURETA 07/12/5(水) 10:56 発言[未読]
【10060】Re:うまく値を取得できないのですが・・。 あおぎん 07/12/5(水) 13:44 お礼[未読]
【10059】Re:うまく値を取得できないのですが・・。 小僧 07/12/5(水) 11:43 回答[未読]
【10061】Re:うまく値を取得できないのですが・・。 あおぎん 07/12/5(水) 13:59 回答[未読]

【10056】うまく値を取得できないのですが・・。
質問  あおぎん  - 07/12/5(水) 9:54 -

引用なし
パスワード
   いつもお世話になります。
またわからなくなったので教えてください。


健康診断等を管理するデータベースを作成しています。

その中で衛生管理者等の意見を記入するため、コメントリストを作成し選択するようにしています。

T_コメントは
以下のようなテーブル構成で、1指導 2再検査 3治療 3つの区分にわかれ、それぞれにコメント番号を付してコメントリストを作っています。(各区分の項目は現在10〜15くらい)
T_コメント
コメント区分コード コメント区分 コメント番号 コメント 
1          指導     1     ○○に注意しましょう。
1          指導     2     ○○を控えましょう
2          再検査    1     ○○の検査を受けましょう
2          再検査    2     ▲▲の検査を受けましょう
3          治療     1     ○○の治療が必要です。
3          治療     2     ▲の値について○○の治療を受けてください。

このT_コメントを元に各受検者のデータの意見欄に入力していくのですが、リストにない意見をその都度増やす必要があるため、F_コメントリストフォームのコマンドボタンをクリックすると、そのコメントの新しい番号を取得しそのレコードに飛ぶようにコメント追加ボタン(コマンド66)を配置し、下のようにコードを書いています。


Private Sub コマンド66_Click()
On Error GoTo Err_コマンド66_Click
 Dim intX As Integer
Select Case Forms!F_コメント入力!フレーム33
Case 1
   DoCmd.GoToRecord , , acNewRec
   DoCmd.OpenTable "T_コメント", acNormal, acEdit
   intX = DMax("コメント番号", "T_コメント", "コメント番号>0 and コメント区分コード=1 ")
  コメント番号 = intX + 1
  コメント区分コード = 1
  コメント区分 = "指導"
   DoCmd.Close acTable, "T_コメント"
 Case 2
  DoCmd.GoToRecord , , acNewRec
  DoCmd.OpenTable "T_コメント", acNormal, acEdit
  intX = DMax("コメント番号", "T_コメント", "コメント番号>0 and コメント区分コード=2 ")
  コメント番号 = intX + 1
  コメント区分コード = 2
  コメント区分 = "再検査"
  DoCmd.Close acTable, "T_コメント"
Case 3
  DoCmd.GoToRecord , , acNewRec
  DoCmd.OpenTable "T_コメント", acNormal, acEdit
  intX = DMax("コメント番号", "T_コメント", "コメント番号>0 and コメント区分コード=3 ")
  コメント番号 = intX + 1
  コメント区分コード = 3
  コメント区分 = "治療"
   DoCmd.Close acTable, "T_コメント"
   End Select
Exit_コマンド66_Click:
  Exit Sub
Err_コマンド66_Click:
  MsgBox Err.Description
  Resume Exit_コマンド66_Click
 
End Sub

F_コメント入力!フレーム33はコメント区分を選択するオプショングループです。
フレーム33で1を選択すると、コメント区分が「指導」のF_コメントリストフォームが表示されます。

F_コメント入力!フレーム33で「指導」を選択している場合は、T_コメントテーブルの、指導区分のコメント番号のいちばん大きい値を取得し、1を加えた数値をコメント番号に入力し、ついでにコメント区分コードと区分も入力するという処理を行っているつもりなのですが、

実際にコマンドボタンをクリックすると、3の治療を選択しているのにもかかわらず、2の再検査の値を取得したりと、処理がうまくいきません。


解消方法をどなたか教えていただけたらと思います。
よろしくお願いします。

(Win /Accessともに2000)

【10057】Re:うまく値を取得できないのですが・・。
発言  VBWASURETA  - 07/12/5(水) 10:56 -

引用なし
パスワード
   ▼あおぎん さん:
こんにちは。

違っていたらすみません。
気になったのは

>Select Case Forms!F_コメント入力!フレーム33
> Case 1
> Case 2
> Case 3
>   End Select

ですが、フレームの値って1からでした?
VBAから離れているもので忘れてます・・・

【10059】Re:うまく値を取得できないのですが・・。
回答  小僧  - 07/12/5(水) 11:43 -

引用なし
パスワード
   ▼あおぎん さん:
こんにちは。

当方の環境(WinXP SP2、Access2003 SP3)ですと
[F_コメント入力] 上に非連結のフレームを作り、
[F_コメントリスト] 上のコマンドボタンをクリックすると
期待通りの値が得られましたよ。

やりたい事はコード的には間違っていないかと思われますので
何かちょっとした所が問題になってそうですね。
(VBWASURETA さんご指摘のオプション値が 0、1、2 になっていないか等)

>Select Case Forms!F_コメント入力!フレーム33
> Case 1
>   DoCmd.GoToRecord , , acNewRec
>   …
> Case 2
>   DoCmd.GoToRecord , , acNewRec
>   …
> Case 3
>   DoCmd.GoToRecord , , acNewRec
>   …
> End Select

せっかく Case 文 を使われてるのですから、
Case内で同じ処理をするのであれば外に出してしまった方が良さそうですね。


> DoCmd.OpenTable "T_コメント", acNormal, acEdit
> DoCmd.Close acTable, "T_コメント"

F_コメントリストが連結フォームだと思われるので、
T_コメントを Open/Close しないでも大丈夫ですね。


> T_コメント
> コメント区分コード コメント区分 コメント番号 コメント 
> 1          指導     1     ○○に注意しましょう。
> 1          指導     2     ○○を控えましょう
> 2          再検査    1     ○○の検査を受けましょう
> 2          再検査    2     ▲▲の検査を受けましょう
> 3          治療     1     ○○の治療が必要です。
> 3          治療     2     ▲の値について○○の治療を受けてください。


これは意見が分かれる所なのですが、正規化した方が良さそうですね。

T_コメント区分マスタ
コメント区分コード コメント区分
1          指導     
2          再検査    
3          治療     


T_コメント
コメント区分コード コメント番号 コメント 
1           1     ○○に注意しましょう。
1           2     ○○を控えましょう
2           1     ○○の検査を受けましょう
2           2     ▲▲の検査を受けましょう
3           1     ○○の治療が必要です。
3           2     ▲の値について○○の治療を受けてください。


の様にして、クエリで両テーブルを結合したものを
フォームのレコードソースにする事をお勧めします。

【10060】Re:うまく値を取得できないのですが・・。
お礼  あおぎん  - 07/12/5(水) 13:44 -

引用なし
パスワード
   ▼VBWASURETA さん:

フレームのオプション値の設定がおかしかったです^^;。
ご指摘ありがとうございました。

【10061】Re:うまく値を取得できないのですが・・。
回答  あおぎん  - 07/12/5(水) 13:59 -

引用なし
パスワード
   ▼小僧 さん:

回答ありがとうございます。
コードがおかしくないとのことで、オプション値を確認したら・・・間違ってました^^;。
よーく確認して投稿したつもりですが、そそっかしくて申し訳ないです。
お騒がせしました。
そして、ありがとうございました。

>>Select Case Forms!F_コメント入力!フレーム33
>> Case 1
>>   DoCmd.GoToRecord , , acNewRec
>>   …
>> Case 2
>>   DoCmd.GoToRecord , , acNewRec
>>   …
>> Case 3
>>   DoCmd.GoToRecord , , acNewRec
>>   …
>> End Select
>
>せっかく Case 文 を使われてるのですから、
>Case内で同じ処理をするのであれば外に出してしまった方が良さそうですね。

最初selectcaseとcase1の間に出したらエラーが出ましたが、位置を変えたらうまくいきました。(いまいちどこに書けばどこの範囲に影響するかわかってなくて・・。)
ありがとうございます。
>
>
>> DoCmd.OpenTable "T_コメント", acNormal, acEdit
>> DoCmd.Close acTable, "T_コメント"
>
>F_コメントリストが連結フォームだと思われるので、
>T_コメントを Open/Close しないでも大丈夫ですね。
>

以前使ったコードやサンプルをコピーして少し書き換えて・・というような感じでやってますので、無駄に記述していることが多いようです。ご指摘ありがとうございます。


>これは意見が分かれる所なのですが、正規化した方が良さそうですね。
>
>T_コメント区分マスタ
>コメント区分コード コメント区分
>1          指導     
>2          再検査    
>3          治療     
>
>
> T_コメント
> コメント区分コード コメント番号 コメント 
> 1           1     ○○に注意しましょう。
> 1           2     ○○を控えましょう
> 2           1     ○○の検査を受けましょう
> 2           2     ▲▲の検査を受けましょう
> 3           1     ○○の治療が必要です。
> 3           2     ▲の値について○○の治療を受けてください。
>
>
>の様にして、クエリで両テーブルを結合したものを
>フォームのレコードソースにする事をお勧めします。

参考にします。

本当にありがとうございました。

799 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078201
(SS)C-BOARD v3.8 is Free