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

投稿日: 2004/07/27(Tue) 17:32
投稿者魔界の仮面弁士
Eメール
URL
タイトルRe^4: 0(ゼロ)を取得する方法を教えてください

まだ、ソースコードを手書きしていませんか?
クリップボードからコピーしているのであれば、ソースコード中に
全角空白のインデントが含まれる事は無いと思うのですが…。

# インデントだけを修正した、という事ならば、良いのですけれども。


> Public 子_1 As Integer   '子の年齢
> Public 子_2 As Integer
> Public 子_3 As Integer      ここまで標準モジュールです

各モジュールには、「Option Explicit」を付けておいた方が良いと思いますよ。
これを付けておかないと、変数名の付け間違いなどによる誤動作に気が付きにくくなりますから。


> Private Sub 試算_Click()
>    子_1 = Val(ko1.Text)   
>    子_2 = Val(ko2.Text)
>    子_3 = Val(ko3.Text)

テキストボックスに、数値以外の文字が入力される事はありますか?

たとえば、 ko1.Text = "12,345" だった場合、[子_1] は 12 になりますし、あるいは、
ko1.Text = "1.2%" などが入力されると、Val関数がエラーになります。注意してください。


>   If 子_1 <= 18 And 子_2 = Empty And 子_3 = Empty Then

確認のため、判定文の前に、
   Debug.Print "子_1="; 子_1, TypeName(子_1)
   Debug.Print "子_2="; 子_2, TypeName(子_2)
   Debug.Print "子_3="; 子_3, TypeName(子_3)
というコードを置いて、各変数の内容とデータ型を確認してみてください。
Empty という値が表示される事は無いと思います。

先にも書きましたが、子_2 や 子_3 は Integer型ですので、
これらが Empty になる事はありえません。

もし、数字の「0」として判定したいのであれば、
   If 子_1 <= 18 And 子_2 = 0 And 子_3 = 0 Then
のようにしてみてください。



> 次に、フォーム2へ
> If 子_1 <= 18 And 子_2 = Empty And 子_3 = Empty Then
>     Image1.Visible = True   'デフォルトはFalse
> End if

Form2の方の処理の流れを見直してみてください。

Form1.Command1 をクリックすると、Form1はUnloadされ、Form2が表示されるわけですよね。

その場合、Form2を表示する前に、Form1.試算をクリックしていなかった場合、
[子_1], [子_2], [子_3]の変数の値が変化しない事になりますよ。
(特に何もしていなければ、これらの変数は 0 のまま、という事です)


かといって、フォーム2側の If文判定の直前に、
  [子_1] = Val(Form1.ko1.Text)
といったコードを含めてしまうのも NG です。
なぜなら、Form2 を表示した時には、既にForm1はUnloadされていますので、
この時点では、テキストボックスに入力した値も消えているからです。


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


> 0だと表示できません。
「子_1 が 18以上の時、または 0 の時に表示する」という意味なら、
『If 子_1 >= 18 Or 子_1 = 0 Then』になりますね。


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

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

- Web Forum -