質問: "Sheet2" ThenでブックAがアクティブになっているのでブックBを表示させたいです。 その後もう一度ユーザフォーム内にあるボタンを押すと実行エラー9 インデックスが有効範囲内にありませんとエラーになります。 Debug.Print等で確認したところブックBがアクティブにならずに(ブックAがアクティブ状態で) Worksheets("sheet2").Activateが実行され実行エラー9となっております。 **ユーザフォームへフォーカスしてボタンを押そうとした時にブックAをアクティブにさせない方法** **またはブックBを確実にアクティブにするにはどうしたら良いのでしょうか?** よろしくお願い致します。
回答: フォーカス移動するイベント(クリック時イベントなど)内での、フォーカスを変更するコマンドは、イベント発生のタイミングの関係だと思いますが、うまく動作しないことがあります。 このような場合、私の場合はタイマー処理でコマンドの発生タイミングをずらして対処しています。 **標準モジュール** ``` Public Sub SheetActivate() With Workbooks("ブックB.xlsx") .Activate .Worksheets("sheet2").Activate End End Sub ``` **ユーザーフォームモジュール** ``` Private Sub CommandButton3_Click() Application.OnTime Now(), "MyActivate" End Sub ``` ちなみに、`If NOT shtName = "Sheet2" Then` でアクティブシート名をチェックしてますが、意味ないですね。ユーザフォームのコマンドボタンをクリックするとフォーカスが移動しますので。