- ベストアンサー
Excel VBA シートの移動について
- Excel VBAを使用してシートの移動を行う際に、表示されているウィンドウのみが移動する方法を教えてください。
- シートの構成は1から10までの番号と『メイン』のシートがあり、『メイン』以外は非表示にしています。現在の方法では、ウィンドウが2つに分割され、『メイン』のシートが表示されたまま移動してしまいます。
- 使用していないシートを非表示にした状態を保ちつつ、実行したウィンドウのみが移動する方法を知りたいです。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
Sub sheet2() Dim window1 As Window Set window1 = ActiveWindow Sheets("1").Visible = False Sheets("2").Visible = True Sheets("3").Visible = False Sheets("4").Visible = False Sheets("5").Visible = False Sheets("6").Visible = False Sheets("7").Visible = False Sheets("8").Visible = False Sheets("9").Visible = False Sheets("10").Visible = False Application.Windows("test.xlsm:1").Activate Sheets("main").Select If window1.Caption <> "test.xlsm:1" Then Application.Windows("test.xlsm:2").Activate Sheets("2").Select Else Sheets("2").Select End If End Sub ごめんなさいこちらでごぜーやす!!
その他の回答 (6)
- atamagawarui5
- ベストアンサー率25% (112/440)
Sub Sheet2に移動() Sheets("1").Visible = False Sheets("2").Visible = True Sheets("3").Visible = False Sheets("4").Visible = False Sheets("5").Visible = False Sheets("6").Visible = False Sheets("7").Visible = False Sheets("8").Visible = False Sheets("9").Visible = False Sheets("10").Visible = False Sheets("main").Select If ActiveWindow.Caption <> "test.xlsm:1" Then Application.Windows("test.xlsm:2").Activate Sheets("2").Select Else Sheets("2").Select End If End Sub 両方とも切り替わっているのですが、Selectれてないだけですね これでいいと思います
- atamagawarui5
- ベストアンサー率25% (112/440)
Sub 2に移動() With ActhiveWindow Worksheets("2").Visible = True ActiveSheet.Visible = False Sheets("2").Select End With End Sub シート分割してアクティブWindowだけを動かしたいということですね? これでどうですかね?
補足
んー、違うんですよ。 アクティブウインドウにはなっているんですけど、実行したらアクティブじゃない方のウィンドウは再表示したシートに移動しちゃうんですよね。 でもアクティブなウインドウはセレクトしないと移動しないんです。 なんか仕様っぽいですね(・ω・` )
- atamagawarui5
- ベストアンサー率25% (112/440)
ExcelBook2つ開いて作業しているということですかね? 記述をWorkBook1.WorkSheet("2").Visible = TRUE でも同じ症状出ますかね??
- atamagawarui5
- ベストアンサー率25% (112/440)
http://officetanaka.net/excel/vba/sheet/sheet06.htm きっとこれの事言っているのですよね?
補足
>マクロのコードで実行するとアクティブになりません。 ウインドウ2でマクロを実行するとウインドウ2では再表示してもアクティブにならないんですが、ウインドウ1ではなぜか再表示したシートがアクティブになるんです。 ブックを2つではなくて、一つのブック内で新しいウインドウを開き、シート別で表示している状態と言う事です。
- atamagawarui5
- ベストアンサー率25% (112/440)
それでしたら、ステップデバッグしましょ、F8で見ていくか、ブレークポイント置いて走らすかどちらかで、おかしい場所は特定できますので。
補足
回答ありがとうございます。 F8でコードを追ってみたら Worksheets("2").Visible = True '非表示のシートを表示 のところでなぜか『メイン』シートを表示しているウインドウ1が、『2』に移動します。実行しているのはウインドウ2のシート『1』の場所なのにです・・・ なぜでしょう・・・
- atamagawarui5
- ベストアンサー率25% (112/440)
原因はSheetが開いた順にシート番号が振られるためです。 この場合、シート名で移動させた方がバグは出にくいですね。 ActiveSheet.Visible = False ここも、メインがアクティブになっているなら、メインが隠れます。 シート名で指定したほうがいいです。
補足
それがシート名で指定しても同じ現象が起こるのです(・ω・` ) あと不明なのですが、ウインドウ2を『メイン』にして、ウインドウ1でシート移動をしたら『メイン』は移動しませんでした。 なぜでしょう・・・・ 原因がさっぱりです
お礼
できました!! 何度も丁寧な回答ありがとうございますm(_ _ )m