[英]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.