VisualBasicで、関数内で関数を呼び出した際、呼び出された側で Exit Sub を使っても呼び出された側しか終了されず、呼び出し元の関数を終了させる事ができません。例えば

Private Sub Command1_Click()
XXX
Label1.Caption = ”aaa”
End Sub

Private Sub XXX()
Exit Sub
End Sub
としても Label1.Caption は ”aaa” になってしまいます。
呼び出された側で、呼び出し元ごと終了させられる方法はあるでしょうか?
よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/06/22 09:53:24
  • 終了:--

回答(10件)

id:mstkwb No.1

mstkwb回答回数32ベストアンサー獲得回数12005/06/22 09:59:20

ポイント26pt

http://www.hatena.ne.jp/1119401604#

人力検索はてな - VisualBasicで、関数内で関数を呼び出した際、呼び出された側で Exit Sub を使っても呼び出された側しか終了されず、呼び出し元の関数を終了させる事ができません。例えば ..

↑ダミーです。

XXXをSubではなくFunctionにしてXXXでExitしたときは固有の戻り値を返すようにします。Command1_Clickではその戻り値を判断して”aaa”を代入しないようにするというのがオーソドックスなやり方だと思います。

id:tecra

すいません。

XXX内だけを変更してどうにかしたいんです。

2005/06/22 20:13:25
id:sora0513 No.2

sora0513回答回数11ベストアンサー獲得回数02005/06/22 10:01:30

ポイント13pt

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_k05.htm

VB 基礎編 (その五) 関数構造(sub、function) private、public、ByVal、ByRef - SAK Streets

戻り値返して、それで判断すれば良いかと思いますが。

id:taknt No.3

きゃづみぃ回答回数13539ベストアンサー獲得回数11982005/06/22 10:06:53

ポイント13pt

残念ながら、このような場合は、戻り値を返してあげて それにより、呼び出し元で 終了させるしかありません。


ちなみに Exit Sub は、その Subを終了させるという意味で、それは Private Sub XXX() のSubという意味です。

id:goldsaint No.4

たけし回答回数28ベストアンサー獲得回数02005/06/22 10:13:31

ポイント13pt

http://www.microsoft.com/

Microsoft Corporation

Private Sub CommandButton1_Click()


If fn_test = -1 Then

TextBox1.Text = ”AAA”

Exit Sub

End If

TextBox1.Text = ”BBB”

End Sub

Private Function fn_test() As Integer


fn_test = -1

Exit Function


End Function


こうやってもできます。

手元にエクセルしかないんで、後はちょいなおしてみて

id:kuro_rakko No.5

kuro_rakko回答回数4ベストアンサー獲得回数02005/06/22 10:48:55

ポイント13pt

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_p06.htm

VB 入門編6 - 関数構造、function、sub、組み込み標準関数、エラートラップ - SAK Streets

Private Sub Command1_Click()


if XXX then

Label1.Caption = ”aaa”

else

exit sub

end if


End Sub


Private function XXX() as boolean

XXX=False

End function


呼び出し元ごと終了させる方法は無いと

思うので上記のように書いてみるのはどうでしょうか。

的外れだったらすみません。

id:Rascal_Dieter No.6

Rascal_Dieter回答回数4ベストアンサー獲得回数02005/06/22 11:33:00

ポイント13pt

exit sub自体はその関数を抜ける、と言う処理ですので、aaaとなるのは正常の動作だと思います。


---------

Private Sub Command1_Click()

’ 終了判定用のフラグ

e_flag as integer

XXX(e_flag)


’ フラグを確認、1の場合は処理を抜ける

if e_flag = 1

then

’ フラグ1の場合

Exit Sub

end if


Label1.Caption = ”aaa”

End Sub


Private Sub XXX(exit_flag as integer)

if ここに終了条件を

then

’ 関数終了の場合、フラグを1に

exit_flag = 1

Exit Sub

else

  ’ 終了しない場合、フラグを0に

exit_flag = 0

end if


End Sub

---------


上記のようにフラグを設けて、そのフラグによって判断すれば良いかと思います。

URLでは初心者掲示板等が設置してありますので質問もしやすく、的確な回答をもらえる場合が多いのでオススメです。

id:andi No.7

andi回答回数448ベストアンサー獲得回数02005/06/22 12:47:58

ポイント13pt

既に同じ回答があるかもしれませんが「End」で可能です。


Private Sub XXX()

End

End Sub

id:tecra

Endにするとプログラム自体が終了してしまいます。すいません。

2005/06/22 20:15:26
id:andi No.8

andi回答回数448ベストアンサー獲得回数02005/06/22 12:48:40

失礼。EndだとPG自体終了でした。

ポイント要りません。

id:tecra

あっありがとうございます.

2005/06/22 20:15:49
id:sulume No.9

sulume回答回数48ベストアンサー獲得回数02005/06/22 14:03:23

ポイント13pt

http://www.microsoft.com/japan/msdn/library/default.asp?url=/jap...

MSDN ライブラリ サイト移行に関する重要なお知らせ

Exit Subは現在の関数の中でしか有効ではないので、呼び出し元まで一緒に終了させる方法はありません。


この場合であれば


Private Function XXX() As Boolean

 XXX = False

 Exit Function


 XXX = True ’Exitしない場合

End Function


として


Private Sub Command1_Click()

 If XXX = False Then

  Exit Sub

 End If

 Label1.Caption = ”aaa”

End Sub


としてはどうでしょうか?

id:tecra

上に同じです.

2005/06/22 20:16:41
id:syuzabu No.10

syuzabu回答回数155ベストアンサー獲得回数22005/06/22 15:14:52

ポイント13pt

http://www001.upp.so-net.ne.jp/yoshihiro/gram4.htm

VBぷろぐらむ工房:文法書4

結論から言うと無理ですが、

プロシージャをSubではなくFunctionにして

戻り値を見てCommand1_Click()側で

Exit Subしたら如何でしょうか?


質問のコードではXXX()内の

2行目コードExit Subが実行された時点で

関数から抜けて3行目は実行されません。

id:tecra

XXX関数内でどうにかしたかったのですが,皆さんのご返答を拝見する限り無理そうですね。あきらめて呼び出し元を変更します。ありがとうございました。

2005/06/22 20:18:18

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません