访问 - 自定义 "was unable to append all data to table"?

Access - custom "was unable to append all data to table"?

我创建了代码,用于通过 TransferSheet 将数据从 Excel 导入到所需的 table,并构建了查询方法。我也在尝试解决用户在将数据导入数据库时​​可能出现的所有错误(错误的文件格式、附加 0 行、与数据库中的字段名称不同等),但无法摆脱错误 3059 "was unable to append all data to table" - 当您尝试导入一些无效数据时发生。我想要一个针对此错误的自定义 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 已打开内置 window 后弹出自定义 Msgbox,与 DoCmd.SetWarnings False 无关。如果我在 TransferSheet 方法之前移动 DoCmd.SetWarnings False,将执行导入并且不显示 Msgbox - 这是错误的。我该如何处理这个错误,有人知道吗??

您可以导入临时 table。

然后使用转换和清理数据的查询阅读此内容,并使用此查询进行进一步处理 - 现在 运行 不会出现由格式错误的数据引起的错误。

我想出了另一种方法来解决这个问题。我已经在 DoCmd.TransferSheet 方法之前放置了我需要的所有控件,包括消除导致 "was unable to append all data to table" 的错误。我添加了检查 excel 文件的代码,如果 Excel 文件数据不符合条件,则不会执行 DoCmd.TransferSheet - 因此根本不会出现错误 "was unable to append all data to table" .这是(首先检查 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: