電子書籍の厳選無料作品が豊富!

現在GOTO命令を用いて、処理をしようとしていますが、一つの関数内でGOTO命令はOKなのですが、GOTO命令先の関数が違う場合はGOTOは使えないのでしょうか?

つまり
Private Sub CommandButton1_Click()
  処理

back:

end Sub

Private Sub CommandButton2_Click()
  処理
goto back
end Sub

上記のようにGOTOのラベルが他の関数内にある時はつかえないのでしょうか?何か方法ないでしょうか?

A 回答 (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です。
では。
    • good
    • 0

過去に類似の質問がありましたので、参考URLを読んでみてください。



私見では、例外処理以外でGoto文が必要になるなら設計に問題があると思います。
(私個人の「思い」なので、客観的に正しいかどうか何とも言えませんが)

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=443600
    • good
    • 0

残念ながらできません


(理由はスタックがおかしくなるので暴走します)

goto back以降を関数化して
CommandButton1_ClickとCommandButton2_ClickからCALLするのが美しいコーディング かな(ボタンを押されたら、最後に同じことをしたいのでしょう?)
    • good
    • 0

こんばんわ。


GOTOで飛べるのは、同一関数内だけです。
以前は、プログラム中だったら大丈夫だったのですが。

対応策としては、関数の戻り値を使って、呼び出し側でジャンプすることでできますよ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!