- ベストアンサー
Book間の移動
Excel VBA でBook2にシートを移動した後、元のBook1に自動で戻る VBAを教えたください。 Sub シートを移動する() Windows("Book1.xls").Activate Sheets(エリカ).Select Sheets(エリカ).Move After:=Workbooks("Book2").Sheets(1) このあとBook1に戻りたい! End Sub
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>このあとBook1に戻りたい! のところに、 Windows("Book1.xls").Activate または Workbooks("Book1.xls").Activate を書けばよいだけなのですが、小さなことですが、せっかく Sheets(エリカ).Select するのでしたら、 Sheets(エリカ).Move After:=Workbooks("Book2").Sheets(1) ではなくて、 ActiveSheet.Move After:=Workbooks("Book2").Sheets(1) にするか、あるいは、 Sheets(エリカ).Select はなくてもよいかと存じます。 【これより憶測ですが。。。】 ちなみに、「Workbooks("Book2")」という書き方は、まだ保存していないブックについてですよね(保存済みのブックでしたら "Book2.xls" ですから)。 ということは、マクロの途中で新規ブックを開くような記述があるのかなと存じますが、そのタイミングでブック名が "Book2" になるとは限りませんので、 Workbooks.Add Template:="ブック" したタイミングで、 Dim myWB As Workbook Set myWB = ActiveWorkbook とでもしておいて、 Sheets(エリカ).Move After:=myWB.Sheets(1) というような内容にされた方がよいかも知れません。
その他の回答 (3)
- DOUGLAS_
- ベストアンサー率74% (397/534)
>実行するたびに新しいブックができて、そこにシートが移動してしまいます。 >できれば一度新規ブックを作ったら、そのブックに移動させていきたいんです。 そういうことでしたら、マクロの中で新規ブックを作るのではなくて、「そのブック」は一旦保存しておいて、マクロの中では、 1)「そのブック」を開く 2)処理をする 3)「そのブック」を保存終了する という作業をされればよいかと存じます。 >また、新規に作ったブックにシートを移動したあと、 >「Windows("Book1.xls").Activate」と記載しても >Book1.xlsに戻りません。なんででしょうか? 戻らないときに、何かエラーメッセージが出ないでしょうか? どうしてもお分かりにならないときには、個人情報を伏せ字にして、すべてのコードを呈示なさってみてください。
お礼
ご回答ありがとうございます。
- onlyrom
- ベストアンサー率59% (228/384)
Workbooks("Book1.xls").Activate と一行追加するだけです。 シート名は、"エリカ" として.. '---------------------------------------- Sub シートを移動する() Workbooks("Book1.xls").Sheets("エリカ").Move After:=Workbooks("Book2.xls").Sheets(1) Workbooks("Book1.xls").Activate End Sub '-----------------------------------------
補足
onlyromさん ご回答ありがとうございます。 新規に作ったブックにシートを移動したあと、 「Workbooks("Book1.xls").Activate」と記載しても Book1.xlsに戻りません。なんででしょうか? 省略 Workbooks.Add Template:="ブック" Dim myWB As Workbook Set myWB = ActiveWorkbook Sheets(エリカ).Move After:=myWB.Sheets(1) Windows("Book1.xls").Activate Sheets(エリカ).Select Sheets(エリカ).Move After:=myWB.Sheets(1) Workbooks("Book1.xls").Activate Sheets("Sheet1").Select Range("A1").Select End Sub
- masa_019
- ベストアンサー率61% (121/197)
こんにちは。 エリカが変数なのか文字列なのか良くわからないですが、 例えば、こんな感じです。 Sub シートを移動する() Dim エリカ As String エリカ = "エリカ" With Windows("Book1.xls") .Activate Sheets(エリカ).Select Sheets(エリカ).Move After:=Workbooks("Book2").Sheets(1) 'このあとBook1に戻りたい! .Activate End With End Sub
補足
ご回答いただきありがとうございます。 エリカは変数です。 でも、この回答でBook1にどうして戻れるのでしょうか?
お礼
DOUGLAS_さん 感謝します。 新規ブックを作ってそこにシートエリカを 移動させたかったのですが、おっしゃる通り、実行するたびに、Book2、Book3、Book4...になってしまって、できなかったので、先にファイルを作って自動で開いて、そこにシートを移動するようにしていました。でもDOUGLAS_さんのおかげで理想の形に一歩近づきました。 ただ、これだと実行するたびに新しいブックができて、そこにシートが 移動してしまいます。できれば一度新規ブックを作ったら、そのブックに移動させていきたいんです。 また、新規に作ったブックにシートを移動したあと、 「Windows("Book1.xls").Activate」と記載しても Book1.xlsに戻りません。なんででしょうか? ご教授いただければ助かります。