在保存之前,在Excel 2007macros中testing驱动器的存在

我试图创build一个macros来保存文件在Excel 2007中。我知道VB程序devise,但我能够从下面的互联网search工作,使我能够保存一个给定的文件到每个几个驱动器。

我的问题是,如果驱动器没有插入,macros崩溃。 我已经尝试了几天find正确的语法,包括一个If..Then语句,它会告诉macros跳过一行保存文件到给定的驱动器,如果没有find驱动器,并继续保存该文件到下一个驱动器。

我希望在每一条指令之前都有这样的陈述。 我尝试过将Christos Samaras(2014年1月23日)以及其他许多人的职位都没有成功,都没有成功。 如果有人愿意编辑我的macros来包含语法,如果驱动器存在,请按照保存指令执行,如果指定的驱动器不存在,则继续执行下一条指令(将文件保存到下一个驱动器)我真的很感激它。

明白我是愚蠢的作为众所周知的职位,所以告诉我一个样品,我可以剪切和粘贴将真的非常感激。

所有驱动器都存在的保存macros是:

 Sub SaveFile() ActiveWorkbook.SaveAs "C:\Users\Chris\Documents\Tmpfiles\macrotest.XLSM", FileFormat:=52 ' 52 = xlOpenXMLWorkbookMacroEnabled = xlsm (with macro's in 2007-2016) ActiveWorkbook.SaveAs "C:\Users\Chris\OneDrive\Documents\Tmpfiles\macrotest.XLSM", FileFormat:=52 ' 52 = xlOpenXMLWorkbookMacroEnabled = xlsm (with macro's in 2007-2016) ActiveWorkbook.SaveAs "\\LAPTOP-G0BUU3L4\l\Documents\Tmpfiles\macrotest.XLSM", FileFormat:=52 ' 52 = xlOpenXMLWorkbookMacroEnabled = xlsm (with macro's in 2007-2016) End Sub 

要检查path是否存在,可以使用Dir函数:

 If Dir("C:\Users\Chris\Documents\Tmpfiles\", vbDirectory) > "" Then ActiveWorkbook.SaveAs "C:\Users\Chris\Documents\Tmpfiles\macrotest.XLSM", 52 End If 

或Windows脚本FileSystemObject FolderExists方法:

 With CreateObject("Scripting.FileSystemObject") If .FolderExists("\\LAPTOP-G0BUU3L4\l\Documents\Tmpfiles\") Then ActiveWorkbook.SaveAs "\\LAPTOP-G0BUU3L4\l\Documents\Tmpfiles\macrotest.XLSM", 52 End If End With 

懒惰的select可能是忽略所有的错误,但是如果还有其他错误需要注意,不build议使用:

 Sub SaveFile() On Error GoTo ErrorHandler ActiveWorkbook.SaveAs "C:\Users\Chris\Documents\Tmpfiles\macrotest.XLSM", FileFormat:=52 ' 52 = xlOpenXMLWorkbookMacroEnabled = xlsm (with macro's in 2007-2016) ActiveWorkbook.SaveAs "C:\Users\Chris\OneDrive\Documents\Tmpfiles\macrotest.XLSM", FileFormat:=52 ' 52 = xlOpenXMLWorkbookMacroEnabled = xlsm (with macro's in 2007-2016) ActiveWorkbook.SaveAs "\\LAPTOP-G0BUU3L4\l\Documents\Tmpfiles\macrotest.XLSM", FileFormat:=52 ' 52 = xlOpenXMLWorkbookMacroEnabled = xlsm (with macro's in 2007-2016) Exit Sub ErrorHandler: Debug.Print Err.Number, Err.Description Resume Next End Sub