Access VBA質問箱 IV

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

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


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

【12555】テキストボックスをダブルクリックで自動に番号を振る ガッツだぜ! 14/6/3(火) 21:54 質問[未読]
【12557】Re:テキストボックスをダブルクリックで自... かるびの 14/6/4(水) 1:34 回答[未読]
【12558】Re:テキストボックスをダブルクリックで自... ガッツだぜ! 14/6/4(水) 7:22 質問[未読]
【12562】Re:テキストボックスをダブルクリックで自... かるびの 14/6/6(金) 0:48 回答[未読]
【12565】Re:テキストボックスをダブルクリックで自... マルチネス 14/6/15(日) 7:35 発言[未読]

【12555】テキストボックスをダブルクリックで自動...
質問  ガッツだぜ!  - 14/6/3(火) 21:54 -

引用なし
パスワード
   テーブル1が、

種別  番号
りんご  1
みかん  1
りんご  2
メロン  1
みかん  2
メロン  2
メロン  3

とあります。

フォーム1には、種別と番号のテキストボックスがあります。

新規データ入力で、「種別」テキストボックスに「みかん」と入力し、「番号」テキストボックスをダブルクリックしたとき、「みかん」の番号の最大値の次の番号「3」が自動的に振られるようにしたいのですが、どうしたらいいでしょうか。
なお、
1.「種別」テキストボックスが空欄の場合
または、
2.「番号」テキストボックスに既に数値が入っている場合
は、ダブルクリックしても番号が振られないようにもしたいです。

【12557】Re:テキストボックスをダブルクリックで...
回答  かるびの  - 14/6/4(水) 1:34 -

引用なし
パスワード
    VBAのコードを書くことになります。
 なお、マクロでもできると思いますが、私は、マクロは使ったことがないので、
よくわかりません。でも、考え方は、VBAの場合と同じだと思います。

>「番号」テキストボックスをダブルクリックしたとき
の処理を自動化するわけですから、
「番号」テキストボックスのダブルクリックイベントにコードを書きます。

>1.「種別」テキストボックスが空欄の場合
>または、
>2.「番号」テキストボックスに既に数値が入っている場合
>は、ダブルクリックしても番号が振られないようにもしたいです。
 If文により場合分けしてあげればいいです。
 
 上記の条件からすると、
「番号」テキストボックスにVBAにより自動で値を入力するのは、
   「種別」テキストボックスが空欄でなく、
   かつ、「番号」テキストボックスに数値が入っていない場合
となりますね。
 
 「空欄」というのは、ちょっとだけ厄介です。
 一般に、空欄であるとは、テキストボックスの値がNullである場合、
又は長さ0の文字列が入力されている場合を言います。
 だから、「空欄でない」ということは、
   テキストボックスの値がNullでなく、
   かつ、値が「""」でもない場合
ということになります。
 
 それからNullであるとか、Nullでないとかは、
「値=Null」という式では判定できません。
IsNull関数を使う必要があります。

 「『番号』テキストボックスに既に数値が入っている場合」をどう考えるかですが、
最も単純にはIsNull関数を使うことになりますね。
 「番号」テキストボックスに文字列が入っていてはだめだ
ということを強調したければ、
IsNumeric関数を使って、「番号」テキストボックスに入力されている値が
数値として使える文字列かどうかを判定します。
 なお、テーブル1の「番号」フィールドが数値型であり、かつ、
「番号」テキストボックスが連結コントロールであれば、
そもそも「番号」テキストボックスには、文字列は入力できませんけどね。

>「みかん」の番号の最大値
は、DMax関数を使います。
 この関数の第3引数の書き方にはクセがあるので、注意してください。
 第3引数の書き方の基本は、「フィールド名=値」ですが、
「フィールド名」のフィールドがテキスト型の場合、値をダブルコーテーションで囲みます。
   フィールド名="太郎"
 そのフィールドが日付・時刻型の場合は、#で値を囲みます。
   フィールド名=#2014/06/03#
 そのフィールドが数値型の場合は、何も囲みません。
   フィールド名=234 

 以上をコード化するだけです。

【12558】Re:テキストボックスをダブルクリックで...
質問  ガッツだぜ!  - 14/6/4(水) 7:22 -

引用なし
パスワード
   かるびの さん、具体的にありがとうございます。
私、あまりVBAを自分で書いたことがないので、できましたら
具体的なコードを記していただければありがたいのですが。
よろしくお願いします。

【12562】Re:テキストボックスをダブルクリックで...
回答  かるびの  - 14/6/6(金) 0:48 -

引用なし
パスワード
    コードは自分で考えてみましょう。
 行き詰まったら、また質問してください。

 そうそう、If文で、AかつBをどう表現するかですが、例えば、
テキストボックスtxtNameとtxtCityがあるとして、
   If txtName.Value = "太郎" Then
    If txtCity.Value = "静岡市" then
      (実行させるコード)
    End If
   End If
とするか、
   If txtName.Value = "太郎" And txtCity.Value = "静岡市" then
     (実行させるコード)
   End If
とします。 
 いずれのコードも、
テキストボックスtxtNameの値が「太郎」、かつ、
テキストボックスtxtCiryの値が「静岡市」の場合に
「(実行させるコード)」が実行されます。

【12565】Re:テキストボックスをダブルクリックで...
発言  マルチネス  - 14/6/15(日) 7:35 -

引用なし
パスワード
   マルチ先をリンクしておきます。

ht tp://security.okwave.jp/qa8623851.html

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