- ベストアンサー
GOTO命令
現在GOTO命令を用いて、処理をしようとしていますが、一つの関数内でGOTO命令はOKなのですが、GOTO命令先の関数が違う場合はGOTOは使えないのでしょうか? つまり Private Sub CommandButton1_Click() 処理 back: end Sub Private Sub CommandButton2_Click() 処理 goto back end Sub 上記のようにGOTOのラベルが他の関数内にある時はつかえないのでしょうか?何か方法ないでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんばんわ。 ヘルプでも確認できますが、 ”GoTo ステートメントの分岐先は、同じプロシージャ内だけです。他のプロシージャには分岐できません。” とあります。 つまり、他の関数へのGOTOはできないということです。 どうすればよいかというと Private Sub CommandButton1_Click() 処理A back: 処理B←ここをプロシージャ(関数)化します。 end Sub ↓例ですが、 Private Sub CommandButton1_Click() 処理A Call Syori End Sub Private Sub CommandButton2_Click() 処理A Call Syori End Sub Public Function Syori() 処理B End Function といった感じになります。 この時、処理B に、変数を渡したければ、その旨記述をすれば、OKです。 では。
その他の回答 (3)
過去に類似の質問がありましたので、参考URLを読んでみてください。 私見では、例外処理以外でGoto文が必要になるなら設計に問題があると思います。 (私個人の「思い」なので、客観的に正しいかどうか何とも言えませんが)
- nagare
- ベストアンサー率33% (280/831)
残念ながらできません (理由はスタックがおかしくなるので暴走します) goto back以降を関数化して CommandButton1_ClickとCommandButton2_ClickからCALLするのが美しいコーディング かな(ボタンを押されたら、最後に同じことをしたいのでしょう?)
- fuji1
- ベストアンサー率29% (109/371)
こんばんわ。 GOTOで飛べるのは、同一関数内だけです。 以前は、プログラム中だったら大丈夫だったのですが。 対応策としては、関数の戻り値を使って、呼び出し側でジャンプすることでできますよ。