簡體   English   中英

使用SQL VBA將日期列從Excel上傳到MS Access

[英]Uploading Date Column to ms access from excel using sql vba

我正在嘗試使用帶有adodb的sql將excel工作表中的所有列上傳到msaccess。 除了日期列(其中某些行將為空白)以外,其他所有內容均正常運行。 假設如果我想從Excel工作表上載5行到ms訪問,並且第一行中的任何日期列為空,那么它將拋出數據類型不匹配錯誤。 但是如果我按日期對Excel中的日期列進行排序,日期排在頂部,空白排在底部,並且如果我嘗試上傳,則可以上傳。

因此,我擔心的是ms訪問,盡管我在ms訪問中聲明為正確的數據類型,但考慮基於excel中第一行值的列數據類型。

這是我正在使用的代碼

Public Sub Upload_Data_from_excel()
Set cn = CreateObject("ADODB.Connection")
dbPath = ThisWorkbook.Path & "\db.accdb"
dbWb = ThisWorkbook.FullName
dbWs_shtname = "SHEET1"
tbl_name = "TBL_EXCEL_DATA"
scn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath & ";Jet OLEDB:Database Password=123456"
cn.Open scn

' Delete existing records
ssql = "DELETE * FROM " & tbl_name
cn.Execute ssql

dsh = "[" & dbWs_shtname & "$]"
ssql = "INSERT INTO " & tbl_name & " "
ssql = ssql & "SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh
cn.Execute ssql
Set cn = Nothing
Application.StatusBar = ""

End Sub

在此處輸入圖片說明

任何支持深表感謝

開發人員經常嘗試重新編寫Access內置的功能(通過UI或VBA函數),據我所知就是這種情況。

一行代碼將處理您的導入,包括針對您描述的問題的靈活性。

這段代碼:

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, _
    "TBL_EXCEL_DATA", "C:\tmp-xlimport.xlsm", True, "SHEET1!A:B"

...對我來說很好,沒有錯誤,例如:

屏幕截圖示例

...並會替換您的所有代碼,但刪除現有記錄除外-就我個人而言,我使用簡潔明了的記錄:

DoCmd.RunSQL ("DELETE FROM TBL_EXCEL_DATA")

...或為避免“ x記錄將被刪除 ”警告:

DoCmd.SetWarnings False
DoCmd.RunSQL ("DELETE FROM TBL_EXCEL_DATA")
DoCmd.SetWarnings True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM