私はブック全体をさまざまなサブシステムで作成しています。たとえば、ユーザーが誤ってシートのコードを消去しているサブミットを回避するために、代わりにすべてのサブプライベートをプライベートにします。VBA Excelコールと実行中のバックトラッキング
私のサブシステムは、ワークシート上のボタンをクリックすることによってのみアクティブ化することができ、すべてが意図したとおりに動作します。私の下位部署が、もちろん別のモジュールのプライベートサブを呼び出そうとするまで。この問題を回避するには
は、私が働いても、私は私が必要とするいくつかの柔軟性を与える前のサブから「NextSub」変数に呼び出すことができますApplication.Run
ではなくCall
を使用し、明らかにカントはCall
を取得します。
例:
Sub FirstSub()
*Something going on
Application.Run "SecondSub", SomeVariableSub
End sub
Sub SecondSub(Nextsub as String)
If something Then
*Do something
Application.Run NextSub
Else
Application.Run NextSub
私はApplication.Run
はすべて私の問題を解決したと思ったが、私は順番にサブと呼ばれるのErrorHandlerと呼ばれるラインを、持っていました。それは、私がCall
を使用したときのようにエラーハンドラを含むサブプログラムにプログラムがもう戻って戻ってこないようです。
Applciation.Run
はこの機能を中断しますか?はいの場合は、Call
に変数NextSubを使用してもよろしいですか?そして、もし私がCall
をそのように使うことができないのであれば、影響を受けたサブシステムにOn Error GoTo ErrorHandler
を追加することでこれはすべて修正されますか?
モジュール間でプライベートサブセットを呼び出すことはおそらく非常に悪いことではありますが、私が始めたときにはそれほど新しいことでしたが、プロジェクトは広範囲であり、コードをすべて書き直すことなく修正できませんでした。
はあなたが試すことができ:
正しい方法は、(それがプライベート関数と同じモジュールである限り)すべての私的潜水艦を呼び出すことができますこのようなものを、使用することですModule1.SubName'? – Ian
'あなたが誤ってサブを起動したということはどういう意味ですか?あなたは(ほぼ) 'Application.Run'を使うべきではありません。 – stenci
@Stenciもし彼らがマクロに入り、そこからサブシステムの1つをアクティブにすると、それは壊滅的なものになる可能性があります –