我需要删除名为“模板1”的工作表之后的所有工作表。
到目前为止,我已经尝试过
Sub SheetKiller()
Dim i As Long
Dim j As Long
j = 0
For i = 1 To Sheets.Count
If Sheets(i).Name = "template 1" Then
j = i
End If
Next i
If j = 0 Or j = Sheets.Count Then Exit Sub
Application.DisplayAlerts = False
For i = Sheets.Count To j + 1 Step -1
Sheets(i).Delete
Next i
Application.DisplayAlerts = True
End Sub
但是,我收到错误消息“ Worksheet类的删除方法失败”。有人对此有解决方案吗?
答案 0 :(得分:1)
我唯一想到的会引发此错误的是您的工作簿中有一个“非常隐藏”的工作表。 “非常隐藏”的工作表不会使用您的功能删除。试试这个:
Sub SheetKiller()
Dim i As Long
Dim j As Long
Dim bFound As Boolean
j = 0
bFound = False
For i = 1 To Sheets.Count
If bFound Then Sheets(i).Visible = 0
If Sheets(i).Name = "template 1" Then
j = i
bFound = True
End If
Next i
If j = 0 Or j = Sheets.Count Then Exit Sub
Application.DisplayAlerts = False
For i = Sheets.Count To j + 1 Step -1
Sheets(i).Delete
Next i
Application.DisplayAlerts = True
End Sub
这会将所有要删除的工作表设置为“隐藏”,从而可以在不显示它们的情况下将其删除。如果需要保留“非常隐藏”工作表,请使用以下方法:
Sub SheetKiller()
Dim i As Long
Dim j As Long
j = 0
For i = 1 To Sheets.Count
If Sheets(i).Name = "template 1" Then
j = i
End If
Next i
If j = 0 Or j = Sheets.Count Then Exit Sub
Application.DisplayAlerts = False
For i = Sheets.Count To j + 1 Step -1
If Sheets(i).Visible < 2 Then Sheets(i).Delete
Next i
Application.DisplayAlerts = True
End Sub
答案 1 :(得分:0)
请尝试
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js"></script>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.min.css" />
<script>
$(document).ready(function(){
$( "#month,#month1" ).datepicker({
inline: true,
changeMonth: true,
changeYear: true,
minDate: -20,
maxDate: "+5M +1D"
});
});
</script>
代替ThisWorkbook.Sheets(i).Delete
答案 2 :(得分:0)
确保您已保存带有启用宏的文件,然后尝试:
替换:
Sheets(i).Delete
替换为:
ThisWorkbook.Worksheets(i).Delete
答案 3 :(得分:0)
返回工作表的Index
号,然后删除索引大于该值的所有工作表。
您需要检查“模板1”不是工作簿中的唯一工作表,还是不是工作簿中的最后一个工作表。您还需要从最后一个工作表中删除到第一个工作表-我可以看到您已经在原始代码中完成了工作。
Sub Test()
Dim Indx As Long
Dim x As Long
With ThisWorkbook
On Error Resume Next
Indx = .Sheets("template 1").Index
On Error GoTo 0
If Indx <> 0 Then
If .Sheets.Count > 1 And Indx < .Sheets.Count Then
Application.DisplayAlerts = False
For x = .Sheets.Count To Indx + 1 Step -1
.Sheets(x).Delete
Next x
Application.DisplayAlerts = True
End If
End If
End With
End Sub
编辑:刚意识到-它还需要检查至少一张纸可见,但是猜测“模板1”将可见,因此作弊了一点,而不是对此进行检查。 :)
编辑2:我添加了一个检查以确保模板1 存在。通常,我会将其传递给一个单独的函数,该函数将返回TRUE / FALSE。
编辑3:抱歉!将Worksheets
更改为Sheets
,使其包含图表表。