2016-02-29 76 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

您可以導入臨時表。

然後用轉換和清理數據的查詢讀取此內容,並使用此查詢進行進一步處理 - 該數據現在可以在沒有錯誤數據導致錯誤的情況下運行。

相關問題