繁体   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