VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 2004/07/28(Wed) 00:04
投稿者魔界の仮面弁士
Eメール
URL
タイトルRe^6: 0(ゼロ)を取得する方法

>> 先にも書きましたが、子_2 や 子_3 は Integer型ですので、
>> これらが Empty になる事はありえません。
> ただ、コードの左に赤い丸印をつけて実行し
> その部分が何を取得しているかを確認してみると
> Empty と出てます。

という事は、それらの変数は、標準モジュールで宣言されている
      Public 子_1 As Integer '整数型
      Public 子_2 As Integer
      Public 子_3 As Integer
とは別物である、という事になるかと思います。


> オブジェクトのcaptionにemptyは出ませんが
LabelやFormのCaptionプロパティは、String型ですね。
Emptyを持てるのは、Variant型のみなので、CaptionがEmptyになる事もないはずです。

> では、子_2 子_3には入力がない空欄の場合(第2子、第3子はいない場合)
「第2子」、「第3子」という言葉の意味が良く分かりませんが、
入力があるのは、Form1.ko2.Text であって、子_2 ではありませんよね。

> 空欄を認識させるためには
> どのようなコードが必要でしょうか
テキストボックスが空欄(空の文字列)だった場合、元々のソースにある
  子_2 = Val(ko2.Text)
によって、子_2 には 0 が代入されていますよね。

もし、「0」と空文字列を区別する必要があるなら、「Public 子_2 As Integer」では
表現できませんので、データ型を変更するか、もしくは、空かどうかを判定するために
別の変数を用意する必要があります。(区別する必要が無いなら、そのままでOKです)


> 年齢入力用のテキストボックスは3つあり
> 一人っ子の場合は、ko1のみの入力となり
すみません。こちらは、たてまつさんが作られているプログラムの仕様は、
ほとんど知りませんので、「一人っ子」などの用語を出されても、何の事だか、
話に付いていけないです。。。

# 話の前後関係から、仕様をある程度 類推する事はできますけれども。


> ko2 ko3 は空欄(データはない)ということも認識させたいのです。
今回のテキストボックスは、「年齢入力用」との事でしたよね。
と言う事は、負数が入力される事は無いのでしょうか?

もし、負数の入力がありえないなら、例えば
   If ko2.Text = "" Then
       子_2 = -99999
   Else
       子_2 = Val(ko2.Text)
   End If
のように、『空ならば、-99999を入れておく』ような仕様にされては如何でしょう?

もし、生前年齢も許容させる仕様だとすれば、先述したように、
  案1) 「空欄かどうかを管理する変数」を、別に作っておく。
  案2) データ型 Integerではなく、String や Variant などにしておく。
のいずれかで対応する事になるかと思います。

> > > この結果は、form1のko1の値が1以上であれば、Image1を表示してくれますが
> > 「1以上」ではなく、「18以上」なのでは?
あ、失礼。「18以下」の間違いです。

> いいえ、1〜18で返してくれます。
提示された If 文には、「1以上」という表現はありませんよね。
という事は、「子1 が 0 だった場合」も Image1 は表示されてしまうと思いますよ。

> 子_1 <= 18 And 子_2 = 0 And 子_3 = 0 Then
> ここでも、
> 子_1 = 0
> は0歳だよ と認識してくれません
If文の直前で、値を(0固定で)代入してみたら、認識してくれますよね。
  子_1 = 0
  子_2 = 0
  子_3 = 0
  If 子_1 <= 18 And 子_2 = 0 And 子_3 = 0 Then

直前に代入すれば認識されうのならば、考えられる原因としては、

可能性1) Form2内で使っている[子_1]と、標準モジュールの[子_1]が別の変数となっている。
         (例えば、Form2上に、子_1 という変数やコントロールが存在するなど)

可能性2) 子_1 の値を、うっかり書き変えてしまっている部分がある。

などでしょうか。


> プログラムがempty と0 は選択されているものは同じであるという判断をしている気がします。
まずはヘルプで、Empty について調べて見てください。

Empty とは特殊な値で、「If Empty = 0 Then」と、「If Empty = "" Then」は、
どちらも成立するようになっているのです。そのため、「=」で比較するのではなく、
IsEmpty 関数で比較する必要があるのです。

……ただ、それ以前の問題として、TextBoxのTextプロパティにしても、
「Public 子_2 As Integer」にしても、そもそも Empty 値が入ってくる事は
ありえないので、根本的な問題は、もっと前の部分にあるのだと思います。


> すごくコードが多いのですが一度詳しく検証していただけませんでしょうか?
乗りかかった船ですので、時間の空いた時にでも、少し眺めてみますが…
それぞれのコントロール名などが分かりませんので、結果は期待しないでください。


なお、既に御存知かと思いますが、VB6では「変数名」や「プロシージャ名」あるいは、
「コントロール名」などに、日本語の文字を使うべきでは無いとされています。

予期せぬ動作をする可能性がありますので、すべて英数字の名前にされる事を強くお奨めします。
http://support.microsoft.com/default.aspx?scid=kb;ja;418924


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -