| 
    
     |  | VBAのコードを書くことになります。 なお、マクロでもできると思いますが、私は、マクロは使ったことがないので、
 よくわかりません。でも、考え方は、VBAの場合と同じだと思います。
 
 >「番号」テキストボックスをダブルクリックしたとき
 の処理を自動化するわけですから、
 「番号」テキストボックスのダブルクリックイベントにコードを書きます。
 
 >1.「種別」テキストボックスが空欄の場合
 >または、
 >2.「番号」テキストボックスに既に数値が入っている場合
 >は、ダブルクリックしても番号が振られないようにもしたいです。
 If文により場合分けしてあげればいいです。
 
 上記の条件からすると、
 「番号」テキストボックスにVBAにより自動で値を入力するのは、
 「種別」テキストボックスが空欄でなく、
 かつ、「番号」テキストボックスに数値が入っていない場合
 となりますね。
 
 「空欄」というのは、ちょっとだけ厄介です。
 一般に、空欄であるとは、テキストボックスの値がNullである場合、
 又は長さ0の文字列が入力されている場合を言います。
 だから、「空欄でない」ということは、
 テキストボックスの値がNullでなく、
 かつ、値が「""」でもない場合
 ということになります。
 
 それからNullであるとか、Nullでないとかは、
 「値=Null」という式では判定できません。
 IsNull関数を使う必要があります。
 
 「『番号』テキストボックスに既に数値が入っている場合」をどう考えるかですが、
 最も単純にはIsNull関数を使うことになりますね。
 「番号」テキストボックスに文字列が入っていてはだめだ
 ということを強調したければ、
 IsNumeric関数を使って、「番号」テキストボックスに入力されている値が
 数値として使える文字列かどうかを判定します。
 なお、テーブル1の「番号」フィールドが数値型であり、かつ、
 「番号」テキストボックスが連結コントロールであれば、
 そもそも「番号」テキストボックスには、文字列は入力できませんけどね。
 
 >「みかん」の番号の最大値
 は、DMax関数を使います。
 この関数の第3引数の書き方にはクセがあるので、注意してください。
 第3引数の書き方の基本は、「フィールド名=値」ですが、
 「フィールド名」のフィールドがテキスト型の場合、値をダブルコーテーションで囲みます。
 フィールド名="太郎"
 そのフィールドが日付・時刻型の場合は、#で値を囲みます。
 フィールド名=#2014/06/03#
 そのフィールドが数値型の場合は、何も囲みません。
 フィールド名=234
 
 以上をコード化するだけです。
 
 |  |