Excel 如何使用VBA超越Windows对话框

Excel 如何使用VBA超越Windows对话框,excel,vba,Excel,Vba,下面的代码可以从Zip文件中删除文件夹。 Sub del_fol_from_Zip() CreateObject("Shell.Application").Namespace("C:\Users\mohit.bansal\Desktop\Test\test\first.zip\first\second").Self.Verbs.Item(4).DoIt End Sub 但问题是Windows确认删除,它在执行该行之后立即出现 我曾尝试使用应用程序。DisplayAlerts,但这

下面的代码可以从Zip文件中删除文件夹。

Sub del_fol_from_Zip()

CreateObject("Shell.Application").Namespace("C:\Users\mohit.bansal\Desktop\Test\test\first.zip\first\second").Self.Verbs.Item(4).DoIt


End Sub
  • 但问题是Windows确认删除,它在执行该行之后立即出现

我曾尝试使用
应用程序。DisplayAlerts
,但这仅涵盖Excel应用程序创建的警报。所有谷歌搜索结果都与Excel警报相关,没有关于Windows警报的信息

我找到了此链接,但它是用于Powershell的。谈论通过
$confirm
强制
超越警告

我们是否可以使用
Shell
在上面的行中传递任何参数或其他方式来超越错误?

回收站的属性对话框 避免确认对话框的一种方法是在回收站的“属性”对话框(右键单击“回收站”>“属性”)中预先禁用“显示删除确认对话框”属性:

这里的问题是,您可能不希望您或运行宏的人员一直禁用此设置,因为它有助于防止意外删除。因此,我们希望仅在宏运行时禁用此设置

要使此更改成为临时更改,可以在宏的开头和结尾提示用户禁用该设置,然后重新启用该设置。例如,这行代码将使用“回收站属性”对话框提示用户

CreateObject("Shell.Application").Namespace(ssfBITBUCKET).Self.Verbs.Item(#).DoIt
其中
#
是回收站上下文菜单中
属性
项的位置(从0开始)。如果有疑问,请将
CreateObject(“Shell.Application”).Namespace(ssfBITBUCKET).Self.Verbs
分配给变量,并在调试模式下查看“局部变量”窗口

如果要在宏中进行多次删除,这至少会减少出现的对话框窗口的数量,但假设您的目标是使此过程完全自动化,这仍然不是我们想要的

是否自动取消选中对话框中的复选框? 您可能会使用窗口的API函数SendMessage取消选中复选框,然后,但是在这一点上,您最好首先使用该技术按下
删除确认对话框中的YES按钮(正如Siddharth Rout所提到的)

更改相应的注册表项 <>是的,所以你也可以考虑自动改变这个设置。
请注意,我还没有对此进行测试,对注册表进行更改需要遵守通常的预防性警告。然而,这个选项似乎很有希望,如果我有时间测试它,我会用我的发现更新这个答案。我假设您可能需要做些什么,但希望这些信息足以让您走上正轨。

只需使用
RmDir
,它不会导致弹出窗口警报:

Sub DeleteTest()
    RmDir "path to the catalog"
End Sub

不确定,但可以使用API在该警报窗口上单击“是”:D@SiddharthRout ... 您可以指向链接或任何其他来源以获取更多信息吗?除了删除表格和单元格外,谷歌不会给出任何结果:(我可以为您编写代码,但它有点复杂。解压和删除文件夹并重新压缩要容易得多:D@SiddharthRout…我想我应该玩一点,让它自己发挥作用。我也会了解它的。非常感谢你指出了这个方向。可能会有兴趣。我感谢你的努力,但当从Zip文件中删除时,属性部分的e对话框不会使对话框消失。~~我还必须在更大的代码中实现这一点,它将被大约50个系统上没有管理员权限的用户使用,因此我无法编辑注册表或更改设置。尽管这是非常有用的信息:)@Mikku老实说,我只是觉得这是一个非常有趣的问题,我想和大家分享我自己的研究成果。我同意那里的信息是有用的,但不一定对这个问题有用(除了我已经在评论中的链接)。。。事实上,它是有用的信息,将来可以被寻找类似信息的人使用。给出一个错误
路径未找到
。。该文件存在于Zip文件夹中