質問: ### 前提・実現したいこと ユーザーフォームを用いて電卓作成をしている ### 発生している問題・エラーメッセージ 電卓仕様で、税率を保存するのにセルを一つ使っているので、 開発中に別のワークブックを同時に開いてる場合や、 実際の環境で不具合が起きぬよう起動時にアクティブになるようにソースを記述しました。 別のワークブックを開きながら起動しても問題なく動作しているのですが、 なぜがデバックの際のstep実行する時のみ終了処理の際もともと開いていたワークブックがアクティブにとなってしまい、 結果的にバグとなっています。 リリース時に問題ないとはいえ気分が悪いです... 今回は終了時に税率の変更を検知して保存の是非を問うのですが、 セルを参照する際に必ず不一致となることから発見しました。 目的のワークブックをアクティブにしつつ戻らない方法はありますでしょうか。 ### 該当のソースコード 問題個所のみ抜き出しました 適当なユーザーフォームに閉じるボタンを一つ張り付けてこの通りに実行しても確認できます。 ``` Private Sub UserForm_Initialize() 'アクティブに Workbooks("電卓.xlsm").Activate Debug.Print ActiveWorkbook.Name End Sub Private Sub btnClose_Click() Debug.Print ActiveWorkbook.Name Unload Me Debug.Print ActiveWorkbook.Name End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Debug.Print ActiveWorkbook.Name 'ここに保存確認と処理 End Sub ``` ### 試したこと 処理する都度ワークブック名を習得しましたが、一度目は「電卓.xlsm」となり問題ありませんが 二度目以降全てで元のワークブック名がイミディエイトウィンドウに表示されました stepではなく通常の実行では問題なく全て「電卓.xlsm」がアクティブとなっています。
回答: アクティブなオブジェクトを対象にする処理は他の方も回答しているように避けたほうがいいでしょう。 デバッグに関してですが、 Step実行でのデバッグでは、フォーカスが移動する処理は、想定どおりにならない場合が多々あります。 Step実行中は、VBAウィンドウがアクティブになることが影響しているからだと思います。 フォーカス移動が伴う処理のデバッグは、 コードの途中で Debug.Print を埋め込んで、その時の確認したい値やプロパティをイミディエイトウィンドウに出力して、実行後にイミディエイトウィンドウで確認するという方法を使うと実動作にちかい状況でのデバッグになるでしょう。(Step実行よりは面倒ですが)