我创建了用于将数据从Excel导入到所需表中的代码,通过TransferSheet和构建的Query方法 . 我也试图解决用户在将数据导入db时所能做的所有错误(错误的文件格式,追加0行,字段名称与DB等不一样),但无法摆脱错误3059“无法追加所有数据到表“ - 当您尝试导入一些无效数据时会发生这种情况 . 我想为此错误定制一个Msgbox,并停止执行我的查询 . 这是我的代码 - 简而言之:
Private Sub CmdImport_Click()
Dim SQL As String
Dim dbs As DAO.Database
Set dbs = CurrentDb
On Error GoTo ERR1
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "NEWTABLE", "<Imported file>", True
SQL = " INSERT INTO MyTable (Field1)" & _
" SELECT DISTINCT" & _
" FROM NEWTABLE"
DoCmd.SetWarnings False
dbs.Execute SQL
DoCmd.RunSQL "DELETE * FROM NEWTABLE"
DoCmd.SetWarnings True
ERR1:
If Err.Number = 3059 Then
MsgBox "This file doesn't have proper data to import. Import canceled !"
Exit Sub
End If
End Sub
无论 DoCmd.SetWarnings False
,Access allready打开内置窗口后,此代码弹出自定义Msgbox . 如果我在TransferSheet方法之前移动 DoCmd.SetWarnings False
,则执行导入并且不显示任何Msgbox - 这是错误的 . 我怎么能处理这个错误,有谁知道?
2 回答
您可以导入临时表 .
然后使用转换和清除数据的查询读取此内容,并使用此查询进行进一步处理 - 现在将运行时不会出现错误数据导致的错误 .
我找到了解决这个问题的另一种方法 . 我已经在DoCmd.TransferSheet方法之前放置了我需要的所有控件,包括消除导致“无法将所有数据附加到表”的错误 . 我添加了用于检查excel文件的代码,如果Excel文件数据与条件不匹配,则不执行DoCmd.TransferSheet - 因此错误“无法将所有数据附加到表”根本不显示 . 这是(首先检查Excel文件数据是否适合执行DoCmd.TransferSheet导入的代码的一部分):
代码是来自这个解决的线程的snapshop:loop through Excel columns