我有一个按钮来触发一系列事件,其中之一是删除工作表。在用户进行任何删除前,我会弹出我的自定义YES/NO消息,要求他们确认整个过程。
然后就是删除工作表的子事件,Excel弹出自己的窗口以确认删除工作表。问题在于,如果用户此时选择“否”,那么我的应用程序将处于不一致状态。
如何绕过Excel要求确认删除工作表的步骤?
您可以使用以下方式更改Excel的默认显示警报参数:
Application.DisplayAlerts = False
不要忘记在流程结束时恢复标准行为:
Application.DisplayAlerts = True
for each
循环使我想要删除的工作表“消失”:
Sht.UsedRange.clear
For each shp in sht.Shapes
shp.Delete
Next
For each nm in sht.Parent.Names
if nm.RefersToRange.Parent is sht then nm.Delete
Next
sht.visible = xlSheetVeryHidden
(代码是未经检查的草稿;最终错误可以用on error resume next
来处理)
这远非理想,但它做到了我需要的(当然会增加更多内存消耗)。也许我应该把这个回复变成一个问题,看看Excel 2016是否有更好的解决方法。
Worksheet
对象没有“Save”方法。有一个Workbook.Save
方法,但它也会将即将被删除的工作表保存到磁盘或其他地方,这有点不太合适,并且可能带来一些不必要的副作用。
此外,@felfrag使用了UsedRange.Clear
,这比仅清除内容(ClearContents)还要多做一些事情(它还清除格式)。 - AntoineL删除所有没有“报告”工作表的方法
Dim NM As String
Dim CTS As Integer
Dim CNT2 As Integer
Dim CNT3 As Integer
CNT3 = 1
CNT2 = 1
CTS = Sheets.Count
Do Until CNT2 = CTS + 1
NM = Sheets(CNT3).Name
If Name = "Report" Then
Range("A1").Select
CNT3 = CNT3 + 1
Else
Sheets(NM).Select
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
End If
CNT2 = CNT2 + 1
Loop
oldvalue = Application.DisplayAlerts
,Application.DisplayAlerts = False
,sheet.Delete
,Application.DisplayAlerts = oldvalue
。 - André Chalella