2016-07-25 5 views
0

Ich habe einige prehistorical Code, den ich überprüfen muss, ob es noch mit Office 2016 funktioniert. Mit Office 2013 funktioniert es wie ein Charme, aber jetzt mit der neue Version bekomme ich einen Fehler. Das ist, was ich versuche:VBA löschen Blatt löst Laufzeitfehler 9, aber löscht immer noch Blatt

In Arbeitsmappe A Ich habe ein Arbeitsblatt WS-A, das ich in ein neues Arbeitsmappe B kopieren möchte. Vorher erstelle ich eine Kopie von WS-A (genannt WA- A-Kopie) in Arbeitsmappe A und nehmen Sie einige Änderungen vor. Danach kopiere ich WS-A-Copy in ein neues Workbook B (WS-B). Letztendlich möchte ich WS-A-Copy aus der Original-Arbeitsmappe A entfernen, aber wenn ich versuche, dieses Blatt zu löschen, erhalte ich einen Laufzeitfehler 9 (Index außerhalb des Bereichs).

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 

Ich überprüfe schon, wenn ich den richtigen Arbeitsmappe A bin mit (Debug-Modus - „activeworkbook.Name“ Typ in den Direkt-Fenstern rechts, bevor der Fehler auftritt). Ich überprüfe auch, ob das Blatt in der aktuellen Arbeitsmappe vorhanden ist. Also beide sind wahr.

Aber warum bekomme ich diesen Laufzeitfehler? Und warum wird dieses Blatt WS-A-Copy immer noch in Arbeitsmappe A gelöscht? Und warum ist dies ein Problem in Office 2016, aber mit Office 2013 ist es in Ordnung?

Kann mir jemand einen Tipp geben? Danke im Voraus!

+0

Wie sind Sie durch solche Variablen gekommen? Mein Excel 2013 Compiler würde sie nicht übergeben – user3598756

+1

Um Ihrer selbst willen, vollständig qualifizieren Sie die Arbeitsmappe Variablen und nicht verwenden auswählen oder aktivieren. Es ist wahrscheinlich, dass dies zum Fehler – RGA

+0

@ user3598756 beiträgt: Ich habe gerade die Variablennamen geändert, um den Code lesbarer zu machen –

Antwort

0

Sie sollten Ihren Code vereinfachen, indem Sie Referenzen auf die Objekte setzen, statt sie namentlich zu referenzieren. Wenn Sie WS-A-Copy = ActiveSheet.Name in Set WS-A-Copy = ActiveSheet ändern, können Sie das Arbeitsblatt löschen, ohne auf die Arbeitsmappe zu verweisen, in der es sich befindet. WS-A-Copy.Delete

+0

Vielen Dank! Das Problem selbst wurde nicht gelöst, aber dieser alte Code benötigt einige frische Zeilen, die aus diesem Jahrhundert stammen. Dadurch habe ich einige Zeilen weiter unten den echten Fehler entdeckt, auf den ein illegales Arbeitsblatt verwiesen wurde –

Verwandte Themen