我有一些史前代码,我必须检查它是否仍在使用Office 2016.使用Office 2013它的工作就像一个魅力,但现在使用新版本我得到一个错误。这就是我正在尝试的事情:
在工作簿中我有一个工作表WS-A,我想复制到新的工作簿B.在此之前,我创建了一个WS-A(称为WA-A-Copy)的副本在工作簿A中进行一些更改。然后我将WS-A-Copy复制到新的工作簿B(创建WS-B)。最后我想从原始工作簿A中删除WS-A-Copy,但是当我尝试删除这个工作表时,我得到一个运行时错误9(下标超出范围)。
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
我已经在检查我是否正在使用正确的工作簿A(调试模式 - 在错误发生之前的立即窗口中键入&#34;?activeworkbook.Name&#34;)。 我还检查当前工作簿中是否存在工作表。 所以两者都是真的。
但为什么我会收到此运行时错误?为什么在工作簿A中仍然会删除此工作表WS-A-Copy?为什么这是Office 2016中的一个问题,但是使用Office 2013它没问题?
任何人都可以给我一个提示吗?提前谢谢!
答案 0 :(得分:0)
您应该通过设置对象的引用来简化代码,而不是通过名称引用它们。将此WS-A-Copy = ActiveSheet.Name
更改为Set WS-A-Copy = ActiveSheet
将允许您删除工作表,而无需引用它所在的工作簿。WS-A-Copy.Delete