我创建了用于通过TransferSheet和构建的Query方法将数据从Excel导入到所需表格的代码。我还试图解决用户在将数据导入数据库时所能做的所有错误(错误的文件格式,追加0行,字段名称与数据库中的字段名称不同等),但无法摆脱错误3059&#34 ;无法将所有数据附加到表格#34; - 当您尝试导入一些无效数据时会发生这种情况。我想为此错误定制一个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
此代码在Access allready打开内置窗口后弹出自定义Msgbox,无论DoCmd.SetWarnings False
如何。如果我在TransferSheet方法之前移动DoCmd.SetWarnings False
,则执行导入并且不显示任何Msgbox - 这是错误的。我怎么能处理这个错误,谁都知道?
答案 0 :(得分:0)
您可以导入临时表。
然后使用转换和清理数据的查询来阅读此内容,并使用此查询进行进一步处理 - 现在将运行时不会出现错误数据导致的错误。
答案 1 :(得分:0)
我找到了解决这个问题的另一种方法。我已经在DoCmd.TransferSheet方法之前放置了我需要的所有控件,包括消除导致“无法将所有数据附加到表”的错误。我添加了用于检查excel文件的代码,如果Excel文件数据与条件不匹配,则不执行DoCmd.TransferSheet - 因此错误“无法将所有数据附加到表”根本不显示。这是(首先检查Excel文件数据是否适合执行DoCmd.TransferSheet导入的代码的一部分):
Dim XcelApp As Object
Dim x, i
Set XcelApp = CreateObject("Excel.Application")
XcelApp.ScreenUpdating = False
XcelApp.Workbooks.Open("C:\Users\Lucky\Desktop\Test\Sample.xlsx")
With XcelApp
i = XcelApp.Rows(1).Find(What:="Število", LookIn:=xlValues, Lookat:=xlWhole).Column
x = XcelApp.Range(XcelApp.Cells(1, i), XcelApp.Cells(XcelApp.Rows.Count, i).End(xlUp)).Value
For i = 2 To UBound(x)
If Not IsNumeric(x(i, 1)) Then
ExcelApp.Quit
Set ExcelApp = Nothing
MsgBox "This Excel file is not valid"
: Exit Sub
End If
Next i
End With
XcelApp.Quit
XcelApp = Nothing
代码是来自此解决线程的snapshop:loop through Excel columns