2016-07-25 25 views
0

我有一些史前代碼,我必須檢查它是否仍然與Office 2016一起工作。對於Office 2013,它工作起來就像一個魅力,但現在與新版本我得到一個錯誤。這就是我想要的:VBA刪除工作表拋出運行時錯誤9,但仍然刪除工作表

在工作簿A我有一個工作表WS-A,我想複製到一個新的工作簿B.在此之前,我創建了一個WS-A(稱爲WA- A-Copy)並進行一些更改。之後,我將WS-A-Copy複製到新的工作簿B(創建WS-B)。最後,我想從原始工作簿A中刪除WS-A-Copy,但是當我嘗試刪除此工作表時,出現運行時錯誤9(下標超出範圍)。 ( - 在立即窗口錯誤發生前的權利類型調試模式「activeworkbook.Name?」)

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仍然在工作簿A中被刪除?爲什麼在Office 2016中這是一個問題,但是對於Office 2013,這很好嗎?

有人可以給我一個提示嗎?提前致謝!

+0

您是如何得到像這樣命名的變量的?我的excel 2013編譯器不會傳遞它們 – user3598756

+1

爲了您的目的,完全限定工作簿變量並且不使用select或activate。可能這是造成錯誤的原因 – RGA

+0

@ user3598756:我剛更改變量名稱以使代碼更具可讀性 –

回答

0

您應該通過設置對象的引用來簡化代碼,而不是通過名稱來引用它們。將WS-A-Copy = ActiveSheet.Name更改爲Set WS-A-Copy = ActiveSheet將允許您刪除工作表,而無需參考它所在的工作簿。WS-A-Copy.Delete

+0

非常感謝!本身並沒有解決問題,但是這個舊的代碼需要一些來自本世紀的新線。通過這樣做,我發現真正的錯誤進一步下降了一個非法工作表被引用的地方 –