2012-03-06 83 views
4
的一些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

回答

3

提供和錯誤處理程序來解決這個問題(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 
0

在Access 2003中它們被存儲在隱藏的「MSysIMEXSpecs」系統表中,不確定這是否保留在更高版本中,但如果是這樣,則可以使用標準SQL查看它:

SELECT * FROM MSysIMEXSpecs 

列名是「SpecName」所以這可能是更合適:

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

這將避免陷阱錯誤的