2016-02-29 70 views
0

我创建了用于从Excel导入数据到所需表格的代码,通过TransferSheet和builded Query方法。我也试图解决用户在将数据导入数据库(错误的文件格式,追加0行,字段名称与数据库中不同)时可能执行的所有错误,但无法排除错误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 

此代码弹出,定制MSGBOX访问媒体链接打开内置的窗口,无论DoCmd.SetWarnings False后。如果我在TransferSheet方法之前移动DoCmd.SetWarnings False,则会执行导入,并且不会显示Msgbox - 这是错误的。我如何处理这个错误,任何人都知道?

+0

看起来这是一个坚硬的岩石。仍然没有发现任何可能的工作。 – LuckyLuke82

回答

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

0

您可以导入临时表。

然后用转换和清理数据的查询读取此内容,并使用此查询进行进一步处理 - 该数据现在可以在没有错误数据导致错误的情况下运行。

相关问题