访问 - 自定义"无法将所有数据附加到表格"?

时间:2016-02-29 12:00:48

标签: access-vba ms-access-2010

我创建了用于通过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 - 这是错误的。我怎么能处理这个错误,谁都知道?

2 个答案:

答案 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