如何检查是否已保存的进口与VBA存在

问题描述:

的一些VBA代码我写

部分调用使用保存的导入:这是工作如何检查是否已保存的进口与VBA存在

DoCmd.RunSavedImportExport "import_name" 

相当好对我来说,当保存的进口呢,除了不存在。在那种情况下,它默默地失败。

有没有办法来检查导入定义是否存在,以便我可以提出错误或采取其他行动,如果它不?

我使用Access 2010,但它也需要在2003年工作。

+1

它不会在Access 2003中工作'在加入DoCmd.RunSavedImportExport' Access 2007:[DoCmd.RunSavedImportExport方法](http://msdn.microsoft.com/en-us/library/bb243760(v = office.12).aspx)“**版本增加:** Access 2007” – mwolfe02 2012-03-06 16:44:25

+0

啊, 谢谢。我不知道,直到测试... – jasongetsdown 2012-03-06 17:01:12

+0

感谢竖起大拇指。我发布了一个更通用的解决方案,我使用Access 2002进行了测试。 – 2012-03-06 18:03:04

提供和错误处理程序来解决这个问题(Access 2007年及更高版本):如下

Sub Importer() 
On Error GoTo ErrImport 

DoCmd.RunSavedImportExport "import_name" 

ExitImporter: 
    Exit Sub 

ErrImport: 
    MsgBox Error 'Err = 31602 for missing import specification 
    Resume ExitImporter 

End Sub 

一个更普遍的解决方案使用TransferText命令:

Sub Importer() 
    On Error GoTo ErrImport 

DoCmd.TransferText acImportDelim, "Import_file Import Specification", "import_file", "import_file.txt", False 

ExitImporter: 
    Exit Sub 

ErrImport: 
    MsgBox "Error Number = " & Err & ", Message=" & Error ' Error 3011 indicates import_file.txt not found 
    Resume ExitImporter 

End Sub 

在Access 2003中它们被存储在隐藏的“MSysIMEXSpecs”系统表中,不确定这是否保留在更高版本中,但如果是这样,则可以使用标准SQL查看它:

SELECT * FROM MSysIMEXSpecs 

列名是“SpecName”所以这可能是更合适:

SELECT * FROM MSysIMEXSpecs WHERE SpecName = 'Your Spec Name' 

这将避免陷阱错误的