前提・実現したいこと
Sheetのcopyで新たなBookを作る場合、copyメソッドには戻り値がないため
新たなBookやSheetを取得するための良い手法を知りたいです。
こんな手法があるとか
試したことの例示の内容の認識が間違っているとか
これで十分です等の情報があれば教えてください。
よろしくお願いします。
試したこと
tSheetがコピーする対象のシートだとした場合…
(1)
VBA
1 tSheet.Copy 2 Dim tToBook As Workbook 3 Dim tToSheet As Worksheet 4 Set tToBook = ActiveWorkbook 5 Set tToSheet =tToBook.Sheets.Item(1)
等のようにActive何とかを使ってBookとSheetを取得する方法が
最もシンプルだと思いますが「ActiveWorkbook」とか
対象が不明瞭なコードは如何なものか。と思っています。
※私は大抵…これで実装してますが。
(2)
VBA
1 Dim tCol As Collection 2 Set tCol = New Collection 3 4 Dim tToBook As Workbook 5 Dim tToSheet As Worksheet 6 7 Set tToBook = Workbooks.Add 8 For Each tToSheet In tToBook.Sheets 9 tCol.Add tToSheet 10 Next 11 Set tToSheet = tToBook.Sheets.Item(1) 12 tSheet.Copy after:=tToSheet 13 For Each tToSheet In tCol 14 tToSheet.Delete 15 Next 16 Set tToSheet = tToBook.Sheets.Item(1) 17 tToSheet.Name = tSheet.Name
Bookを予め作っておいて、そこにシートをコピーし
余計なのを後で削除するという手順です。
「tToBook.Sheets.Item(1)」という所が不明瞭な感じがしますが
1シートのみ残っている状態であれば確定されるので許容かと思います。
そういう意味では、tToBook.ActiveSheetでもいいと思います。
ただ大層です。こんなのならしない方が良いのではと思ったりします。
(3)
VBA
1 tSheet.Copy 2 Dim tToBook As Workbook 3 Dim tToSheet As Worksheet 4 Set tToBook = Workbooks(Workbooks.Count) 5 Set tToSheet = tToBook.Sheets.Item(1)
最後に追加されたBookだからWorkbooks(Workbooks.Count)で取れる
らしいですが、なんだか不安です。
※似たような実装の仕方をしたこともありますが。
補足情報(FW/ツールのバージョンなど)
Windows10
Excel2016,365
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/19 20:53 編集