我有以下工作表布局
现在我要做的就是创建一份文档副本,只保留两张
Chase_list
和Summary
(但我需要将文件扩展名从.xlsm更改为.xlsx,以便我无法使用SaveCopyAs
方法)
我尝试使用以下代码执行此操作(也是第一行正常工作,不用担心,变量已经定义,它实际工作表删除会造成伤害< / em>的)
ThisWorkbook.SaveAs new_name & "_end_week_" & current_week - 1, 51, _
accessMode:=xlExclusive
Sheets("Chase_list").Cells.Copy
Sheets("Chase_list").Cells.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Application.DisplayAlerts = False
Sheets("Instructions").Delete
Sheets("03_000002").Delete
Sheets("Additions").Delete
Sheets("Data").Delete
Sheets("Control Panel").Delete
Application.DisplayAlerts = True
基本上它是什么,我们首先将数据粘贴到chase_list中作为值(因为它链接到我们正在删除的另一张纸),一旦我们这样做,我们就开始删除新保存的纸张.xlsx文件(也许这个事实不再是.xlsm会造成一些伤害?)
似乎可以像这样删除工作表:
不幸的是,我收到了以下错误
知道我在这里做错了什么吗?
注意:如果我单步执行代码,它似乎会在最后/前一行代码中崩溃
答案 0 :(得分:1)
此处的问题是您的工作表名为Control Panel
(空格),但您尝试删除Control_Panel
(下划线):
Sheets("Control_Panel").Delete
' space vs undersore ^
<强>改进:强>
您可以使用循环删除Chase_list
和Summary
Dim sh As Variant
For Each sh In Sheets
If sh.Name <> "Chase_list" And sh.Name <> "Summary" Then
sh.Delete
End If
Next sh
替代方案:
如果错误仍然存在,请尝试将工作表复制到新工作簿中并保存。
Sheets(Array("Chase_list", "Summary")).Copy
With ActiveWorkbook
Sheets("Chase_list").Cells.Copy
Sheets("Chase_list").Cells.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
.SaveAs
End With
答案 1 :(得分:0)
您可能正在尝试删除工作表,这是Excel中的最后一个工作表。当您尝试执行以下操作时,Excel将返回1004
:
Option Explicit
Public Sub TestMe()
Dim wks As Worksheet
Dim arrNames As Variant
arrNames = Array("Chase_list", "Summary")
For Each wks In Worksheets
If Not valueInArray(wks.Name, arrNames) Then
Application.DisplayAlerts = False
If Sheets.Count > 1 Then wks.Delete
Application.DisplayAlerts = True
End If
Next wks
End Sub
Public Function valueInArray(myValue As Variant, myArray As Variant) As Boolean
Dim cnt As Long
For cnt = LBound(myArray) To UBound(myArray)
If CStr(myValue) = CStr(myArray(cnt)) Then
valueInArray = True
Exit Function
End If
Next cnt
End Function
您循环浏览Worksheets
,如果剩余的Sheets
超过1 wks
,则会删除valueInArray()
。 ;
是一个布尔函数,返回信息是否在数组中找到了值。