- ベストアンサー
ExcelのVBマクロを、バックグラウンドで動かしたいのです。
ExcelのVBマクロを、バックグラウンドで動かしたいのです。 sheet1のセルに対して操作を行うマクロをMaacroAとします。このマクロをsheet2やsheet3など複数のsheetから呼び出してsheet1を操作したいのですが、どうしても画面がsheet1に移ってしまいます。 Application.ScreenUpdating を使ってもマクロ終了時にsheet1の画面になってしまいます。 どのようにしたらいいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>Worksheets("sheet1").Range("A4:W144").Select 上記、補足で提示したコードの直前には、 Worksheets("Sheett1").Select(Activate)がありますよね。 そうでないと Worksheets("sheet1").Range("A4:W144").Select こんなことはできませんから。 で、回答。 Worksheets("Sheet1").Select Worksheets("sheet1").Range("A4:W144").Select の2行を削除して以下のようにSortだけにする '---------------------------------------------------- Worksheets("sheet1").Range("A4:W144").Sort _ Key1:=Worksheets("sheet1").Range("a4"), _ Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal '----------------------------------------------------- ●点要点● 1.Sortの範囲をシートを明示して直接指定 2.Keyもどのシートのセルなのか分かるようにシート名を付加する ソートに限らず他のシートから、Sheet1を扱う場合は、 Selectはしないで、シート名を付加すればいいということです。 以上です。
その他の回答 (1)
- hana-hana3
- ベストアンサー率31% (4940/15541)
>どうしても画面がsheet1に移ってしまいます sheets("sheet1").select sheets("sheet1").activae というようなコードがあれば確実にアクティブになります。 どのようなコードで何をあいているのかわかりませんが、 Sheets("sheet2").Range("A1").Copy Sheets("sheet1").Range("A1") activesheet.Range("A1").Copy Sheets("sheet1").Range("A1") With Sheets("sheet1") Sheets("sheet2").Range("A1").Copy .Range("A1").Paste activesheet.Range("A1").Copy .Range("A1").Paste End With など、構文で実行シートを指定して、active / select などのコードを含まないコードを書くことでです。 >Application.ScreenUpdating を使ってもマクロ終了時にsheet1の画面になってしまいます。 これは、実行中のシート更新をしないためのオプションですから、構文中でどこかのシートをアクティブにしていれば、処理終了後に最後にアクティブにしたシートが表示されるのは当然の処理です。
補足
>Sheets("sheet2").Range("A1").Copy >など、構文で実行シートを指定して 実はソートのマクロなんですが… Worksheets("sheet1").Range("A4:W144").Select Selection.Sort Key1:=Range("a4"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal では、だめでした。
お礼
動きました。ありがとうございます。