|
自分のExcelブック(自ブック)からVBAで、
もう1つ別のExcelブック(他ブック)を非表示で開いて、
自ブックと他ブックの間でシートをコピーしたいのですが、
他ブックのシートを自ブックにコピーすることはできるのですが、
自ブックのシートを他ブックにコピーするとなぜかエラーになります。
例えば、以下のsampleで、
(A)では、正しくシートがコピーされるのですが、
(B)では、
「実行時エラー'1004' WorksheetクラスのCopyメソッドが失敗しました。」
というエラーになります。
なぜ(A)はOKなのに(B)ではエラーになるのでしょうか。
(B)の部分をどのように記述すればよいのでしょうか。
よろしくお願いします。(Windows7,Excel2010)
--------------------------------------------------
Sub sample()
Dim ExcelBook As Excel.Workbook
Dim FileNameFullPath As String
FileNameFullPath = ThisWorkbook.Path & "\Book1.xlsx"
Set ExcelBook = Workbooks.Open(FileNameFullPath, UpdateLinks:=0)
Application.Windows("Book1.xlsx").Visible = False
'他ブックのシートを自ブックにコピーする (正常)
ExcelBook.Worksheets("Sheet1").Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) '<-(A)
'自ブックのシートを他ブックにコピーする (エラー)
ThisWorkbook.Worksheets("Sheet1").Copy after:=ExcelBook.Sheets(ExcelBook.Sheets.Count) '<-(B)
Application.Windows("Book1.xlsx").Visible = True
Application.DisplayAlerts = False
ExcelBook.Save
ExcelBook.Close
Application.DisplayAlerts = True
Set ExcelBook = Nothing
End Sub
--------------------------------------------------
(注記1) Application.Windows("Book1.xlsx").Visible = False
の部分を、
Application.ScreenUpdating = False
にすると、このエラーは起きませんが、
タスクバーに表示されてしまいます。
(注記2) Set ExcelBook = Workbooks.Open(FileNameFullPath, UpdateLinks:=0)
の部分を、
Dim objEX As Excel.Application
Set objEX = CreateObject("Excel.Application")
Set ExcelBook = objEX.Workbooks.Open(FileNameFullPath, UpdateLinks:=0)
のうに、別インスタンスで開くと、このエラーは起きませんが、
別インスタンス間ではシートのコピーができません。
(注記3) シートのコピーをコピー&ペーストの機能で代用すると、
セルに施されているフィルターなどの設定が外れてしまいます。
|
|