現在オフラインです。再接続するためにインターネットの接続を待っています

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.PathDim xlobj As Excel.ApplicationDim xlbk1 As Excel.WorkbookDim xlbk2 As Excel.Workbook    Set xlobj = CreateObject("Excel.Application")xlobj.Workbooks.AddSet xlbk1 = xlobj.ActiveWorkbookxlobj.Workbooks.AddSet xlbk2 = xlobj.ActiveWorkbookxlbk2.ActiveSheet.Name = "コピー元"xlbk2.Sheets("コピー元").Copy After:=xlbk1.Worksheets("Sheet1") ' xlbk1.Activate ' この行を実行すると回避できますxlbk1.Sheets("Sheet1").Delete  ' この行でエラーが発生しますxlbk1.Saved = Truexlbk2.Saved = Truexlobj.QuitEnd Sub
  6. [実行] メニューから [Sub/ユーザーフォームの実行] をクリックします

結果

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


関連情報
注意 : これは、マイクロソフトのサポート組織内で直接作成された "緊急公開" の資料です。 この資料には、確認中の問題に関する現状ベースの情報が記載されています。 情報提供のスピードを優先するため、資料には誤植が含まれる可能性があり、予告なしに随時改定される場合があります。 その他の考慮事項については、使用条件を参照してください。
プロパティ

文書番号:2928902 - 最終更新日: 06/29/2015 22:50:00 - リビジョン: 3.0

Microsoft Excel 2013

  • kbtshoot KB2928902
フィードバック
>