tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: SheetやBookのコピー後の処理
投稿日: 2009/07/01(Wed) 14:52
投稿者魔界の仮面弁士
> (コピーして出来た新sheetが必ずActiveではないかも
>  しれないと懸念しています。)
そうですね。Active とは限りません。

この場合は、
> xlBook.Worksheets("原紙").Copy after:=xlBook.Worksheets("原紙")
> xlBook.ActiveSheet.Name = TgtShtName
の部分を、位置指定にして
 xlBook.Worksheets("原紙").Copy After:=xlSheet
 xlBook.Sheets(xlSheet.Index + 1).Name = "新しい名前"
という感じにしてみては如何でしょう。After なら +1、Before 指定ならば -1 です。
今回の場合、xlSheet は xlBook.Worksheets("原紙") 自身でも良いでしょう。

なお Move や Copy 動作では、インデックスのつけ直しが行われますので、
 i = xlSheet.Index
 xlBook.Worksheets("原紙").Copy After:=xlSheet
 xlBook.Sheets(i + 1).Name = "新しい名前"
のように、事前に Index を取得しておくのは避けるようにしてください。


> コピーして出来た新Sheetを確実に指定するにはどうすればいいので
> しょうか?
少々手間ですが、こういうのは如何でしょう。

 '1シートのみを持った新規ブックを用意
 PreCount = xlApp.SheetsInNewWorkbook
 xlApp.SheetsInNewWorkbook = 1
 Set xlNewBook = xlApp.Workbooks.Add()
 xlApp.SheetsInNewWorkbook = PreCount

 Set xlDummySheet = xlNewBook.Worksheets(1)
 xlBook.Worksheets(RetShtName).Copy Before:=xlDummySheet
 Set xlNewSheet = xlNewBook.Worksheets(1)
 xlDummySheet.Delete    '最初のシートは不要なので削除
 Set xlDummySheet = Nothing

 xlNewSheet.Name = "あたらしいなまえ"

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。