无需添加MS Scripting Runtime引用的FileSystemObject文件删除替代方案
不依赖FileSystemObject的VBA文件删除替代方案
原代码使用FileSystemObject判断文件存在并执行删除,但该对象需要手动添加MS Scripting Runtime引用,在未配置该引用的多台电脑上运行时容易报错。下面提供两种无需外部引用的原生VBA解决方案,同时修正原代码里的变量名错误:
方法一:使用VBA原生Dir+Kill(推荐)
Dir函数可直接检查文件是否存在,Kill语句是VBA内置的文件删除命令,完全不需要任何外部引用,代码简洁可靠。
修改后的完整代码:
Sub Createbackupfile() Dim strCurrentName As String Dim strCurrentPathAndName As String Dim strCurrentPath As String Dim strPreviousFilename As String Dim strNewPath As String ' 修正变量声明,避免未声明的变体类型 strCurrentName = ThisWorkbook.Name strCurrentPathAndName = ThisWorkbook.FullName strCurrentPath = Replace(strCurrentPathAndName, strCurrentName, "") strNewPath = "OldForecasts\" ' 统一变量命名 ' 保存备份文件 With ThisWorkbook .SaveAs Filename:=strCurrentPath & strNewPath & strCurrentName, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False End With ' 原生方法删除原文件 If Dir(strCurrentPathAndName) <> "" Then ' Dir返回空字符串表示文件不存在 Kill strCurrentPathAndName End If End Sub
方法二:使用Shell调用系统del命令
如果需要更灵活的删除参数(比如静默删除、强制删除只读文件),可以调用系统del命令,注意路径包含空格时要给路径加双引号:
' 替换原代码里的FileSystemObject逻辑部分 If Dir(strCurrentPathAndName) <> "" Then ' /Q 静默删除,/F 强制删除只读文件,vbHide隐藏命令行窗口 Shell "cmd /c del /Q /F """ & strCurrentPathAndName & """", vbHide End If
两种方法对比
Dir+Kill:最常用,代码简洁,执行效率高,适合常规文件删除场景。Shell+del:适合需要特殊删除参数的场景,但需处理路径空格,调用外部进程,相对稍复杂。
内容的提问来源于stack exchange,提问作者Forward Ed
相关产品推荐
相关产品推荐

