2016-07-25 5 views
0

Office 2016で動作しているかどうかをチェックする必要がある、先験的なコードがあります。Office 2013では魅力的ですが、新しいバージョン私はエラーが発生します。VBA削除シートは実行時エラー9をスローしますが、シートはまだ削除しています

ワークブックAでは、新しいワークブックBにコピーしたいワークシートWS-Aがあります。その前に、WS-Aのコピーを作成しています(WA- A-Copy)を変更し、いくつかの変更を加えます。その後、WS-A-Copyを新しいワークブックB(WS-Bの作成)にコピーします。最後に、元のワークブックAからWS-A-Copyを削除したいが、このシートを削除しようとすると実行時エラー9(下付き文字が範囲外)になる。 ( - 「?activeworkbook.Nameを」エラーが発生する直前に、イミディエイトウィンドウにタイプデバッグモード)私は右のワークブックAを使用している場合

WorkbookA = ActiveWorkbook.Name 
WS-A-Copy = ActiveSheet.Name 
Range("A1").Select 
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select 
Selection.Copy 

'go to WS-A-Copy in workbook B and add a copy of the values and formats 
WS-B = ActiveSheet.Name 
Sheets(WS-B).Select 
Range("A1").Select 
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= False, Transpose:=False 
Range("A1").Select 
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= False, Transpose:=False 
Range("A1").Select 

'Go back to Workbook A and delete WS-A-Copy 
Windows(WorkbookA).Activate 

If SheetExists(WS-A-Copy) Then 
    Sheets(WS-A-Copy).Delete <-- Runtime Error 9 
End If 

私はすでにチェックしています。 シートが現在のワークブックに存在するかどうかも確認します。 したがって、どちらも真です。

しかし、なぜこのランタイムエラーが発生しますか?そしてなぜこのシートWS-A-CopyがWorkbook Aで削除されるのでしょうか?そして、なぜこれはOffice 2016の問題ですが、Office 2013は問題ありませんか?

誰でも私にヒントを教えてもらえますか?前もって感謝します!

+0

このような名前の変数はどうやって取得できましたか?私のExcel 2013のコンパイラはそれらを渡しません – user3598756

+1

あなた自身のために、ブックの変数を完全に修飾し、選択を使用しないでください。これは、エラー – RGA

+0

@ user3598756に寄与している可能性があります。コードを読みやすくするために変数名を変更しました。 –

答えて

0

名前を参照するのではなく、オブジェクトへの参照を設定してコードを簡素化する必要があります。このWS-A-Copy = ActiveSheet.NameSet WS-A-Copy = ActiveSheetに変更すると、ワークシートがあるワークブックを参照せずにワークシートを削除できます。WS-A-Copy.Delete

+0

ありがとう!問題自体は解決していませんでしたが、この古いコードでは今世紀の新しい線が必要です。これを行うことで、違法なワークシートが参照されている実際のエラーがさらに深刻化していることがわかりました –

関連する問題