質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

4回答

329閲覧

VBA コードの移動について

Yoshikun_0945

総合スコア224

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/02/22 08:50

編集2018/02/22 08:55

#実現したいこと
①:フォームを開いたままこの行で処理を終了する
(他のsubや他の行には移動させない)
②:private subまたは、public subにて途中の行から処理を開始するのを認めない

どちらなら実現できますでしょうか?

##現時点での動作
現時点のコードだとend subの後、勝手に別のsubの途中に移動してしまい意図しない動作が起こっています。
end subの1つ手前にここで移動終了というコードを記述するか、すべてのsubに途中から開始させないという記述をさせて、意図しない動作を起こさせないとしたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ExcelVBAer

2018/02/22 09:12

ステップ実行(F8)で進めていっても、End Sub の直後に別関数の途中に移動するのでしょうか?
ExcelVBAer

2018/02/22 09:21

また、Subの途中から処理が開始されるという事ですが、該当Subの開始行(Private Sub xxx)にブレークポイントをセットしても途中から処理されるのでしょうか?
Yoshikun_0945

2018/02/22 09:50

処理を開始してほしくないsubに移動され、さらに、そのsubの途中から処理が開始されてしまいます。
Yoshikun_0945

2018/02/22 09:50

なので、開始する行を指定するというよりかは、移動させないという風にしたいです。
sazi

2018/02/22 14:42 編集

>「現時点のコードだとend subの後、勝手に別のsubの途中に移動してしまい意図しない動作が起こっています。」 言葉通りの事が普通に起きたら、プログラミングしている人達からのクレームがすごい事になります。多分そのような動作をするロジックになっているのでしょうから、コードを質問に追記したほうが良いかと思います。
guest

回答4

0

プログラマの意図に反して勝手にあっちいったりこっちいったりすることはありません。
関数内で別の関数が実行される何かしらの要因があるはずです。
おそらく何かしらのイベントが発生しているものと思われます。
例えばWorksheet_Change関数が定義してあると、関数内でセルの値を変更しただけでも関数実行後にWorksheet_Change関数が実行されます。
まずは要因が何かをはっきりさせましょう。
できればコードを修正して、そのイベントが発生しないようにする、もしくはそのイベントが発生しても大丈夫なようなコードに修正するのが望ましいです。
それらがどうしてもできない、もしくは安易に対応したいのであれば、イベントを抑止することが可能です。
対象の関数内で以下のようにしてみてください。

VBA

1Sub 対象の関数 2 Application.EnableEvents = False ' イベント発生無効 3 ~何かしらの処理~ 4 Application.EnableEvents = True ' イベント発生有効 5End Sub

投稿2018/02/23 00:32

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ttyp03さんの言うとおり、勝手に処理が実行されるということはありません。
何かしらの要因があって処理が呼ばれているはずです。

この流れを把握することが解決への道だと思います。


>別のsubの途中に移動
これを確認されているということは、デバッグ実行で流れを追っているのだと思います。

デバッグ実行で流れを追っているのなら、一度「呼び出し履歴」を確認してみてはどうでしょう。
呼び出し履歴画面はデバッグ中にVBEditor画面で[Ctrl] + [L]を押すことで表示され、今実行中の処理がどんな経路で呼び出されたかを確認することができます。

例:
シート上のボタン1をクリックしたイベント(CommandButton1_Click)から処理A(prcA)が呼ばれ、
さらにその中で処理B(prcB)を実行している最中の場合

呼び出し履歴 ===== prcB prcA CommandButton1_Click =====

といった具合に表示されます。

一番上(prcB)が現在処理中の関数です。
その下がprcBを呼び出した関数(prcA)です。
さらにその下がprcAを呼び出した関数(CommandButton1_Click)という見方になります。

一番下(CommandButton1_Click)が一連の処理の起点ということになります。

参考になれば幸いです。

投稿2018/02/26 01:44

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

別のsubの途中に移動してしまい

なぜそのように、判断することに至ったのでしょうか?

「途中」と判断された箇所よりも、以前の行に、ブレークポイントを設定して実行してみて、そのブレークポイントがスルーされるようですと、本当に途中から始まっていると言えると思いますが。

既に確認されましたか?

投稿2018/02/23 07:16

rinren

総合スコア107

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

①該当の処理後にフラグ用変数をオンにし、そのほかの処理はフラグがオフの時のみ処理をする。
②正規の呼び出し元でのみフラグ用変数をオンにし、フラグがオンの時のみ処理をする。

投稿2018/02/22 08:59

Mustang32861341

総合スコア100

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問