Excel 2013 をオートメーションで実行し、異なるウィンドウのシートをコピー後にブックのシートを削除すると、エラーが発生する

現象

オートメーションで実行された Excel 2013 上で、Sheets.Copy メソッドで異なるブックにシートをコピーした後、Sheets.Delete メソッドでシートの削除を行うと、以下のエラーが発生する場合があります。

実行時エラー ‘1004’
Worksheet クラスの Delete メソッドが失敗しました。


原因

Excel 2013 からウィンドウの管理方法が SDI (Single Document Interface) に仕様変更されました。
複数のブックを開いた場合、ブックごとに独自の最上位ウィンドウを持つ管理方法に仕様変更された影響で、Excel 内部のアクティブ ウィンドウ管理状態が適切に更新されないことが原因で発生します。


回避策

削除対象のシートのウィンドウをアクティブ ウィンドウにしてから、Sheets.Delete メソッドを実行します。

詳細

問題の再現手順

  1. Word 2013 を起動し、新しいファイルを作成します
  2. Alt + F11 キーを押下し、Visual Basic Editor を起動します
  3. [ツール] - [参照設定] をクリックし、”Microsoft Excel 15.0 Object Library” をチェックオンします
  4. [挿入] - [標準モジュール] をクリックします
  5. 次のコードを標準モジュール内に貼り付けます

    Sub test()

    Fpath = ActiveDocument.Path

    Dim xlobj As Excel.Application
    Dim xlbk1 As Excel.Workbook
    Dim xlbk2 As Excel.Workbook

    Set xlobj = CreateObject("Excel.Application")
    xlobj.Workbooks.Add
    Set xlbk1 = xlobj.ActiveWorkbook
    xlobj.Workbooks.Add
    Set xlbk2 = xlobj.ActiveWorkbook
    xlbk2.ActiveSheet.Name = "コピー元"
    xlbk2.Sheets("コピー元").Copy After:=xlbk1.Worksheets("Sheet1")

    ' xlbk1.Activate ' この行を実行すると回避できます

    xlbk1.Sheets("Sheet1").Delete ' この行でエラーが発生します
    xlbk1.Saved = True
    xlbk2.Saved = True
    xlobj.Quit

    End Sub
  6. [実行] メニューから [Sub/ユーザーフォームの実行] をクリックします

結果

“xlbk1.Sheets("Sheet1").Delete” のコードで、「実行時エラー ‘1004’ Worksheet クラスの Delete メソッドが失敗しました」が発生します


プロパティ

文書番号:2928902 - 最終更新日: 2016/09/29 - リビジョン: 1

Microsoft Excel 2013

フィードバック