使用VBA将日期从Excel插入Access数据库的日期更改为美国日期

时间:2012-12-03 13:39:04

标签: sql excel vba date ms-access

所以我使用VBA生成的查询将一堆记录从Excel电子表格插入到Access数据库中。

我的查询基本上是这样的:

accName = r.Offset(x, 0)
AccNum = r.Offset(x, 1)
sector = r.Offset(x, 2)
holding = r.Offset(x, 3)
holdingvalue = r.Offset(x, 4)
holdingdate = CDate(r.Offset(x, 5))

sSQL = "INSERT INTO Holdings (AccName, AccNum, Sector, Holding, HoldingValue, HoldingDate)" & _
" VALUES ('" & Replace(accName, "'", "''") & "', '" & AccNum & "', '" & sector & "', '" & Replace(holding, "'", "''") & "', '" & holdingvalue & "', #" & holdingdate & "#)"

生成的查询的示例如下所示:

INSERT INTO Holdings (AccName, AccNum, Sector, Holding, HoldingValue, HoldingDate) 
VALUES ('Account 123', '472700', '', 'IShares S&P 500', '54379.15', #03/12/2012#)

错误运行的位是查询中的日期从英国日期(dd / mm / yyyy)变为美国日期(mm / dd / yyyy)。我也尝试将电子表格上的日期格式化为ISO日期(yyyy-mm-dd),但总是作为美国日期,即使我不使用cdate。 知道这里发生了什么吗?

编辑:当我单步执行代码并将鼠标悬停在holdingdate变量上时,它显示“03/12/2012”并且查询与上述相同(即日期格式为dd / mm / yyy尽管我将holddate定义为holdingdate = Format(r.Offset(x, 5), "yyyy-mm-dd")。单元格中的日期也是连续的(即显示为数字时为41246)。 在输入数据后查看访问数据库时,日期显示为12/03/2012。我只是不明白....

1 个答案:

答案 0 :(得分:0)

解决!我之前曾把dim'd holddate作为约会,所以无论我给它什么格式,它只是返回一个excel日期。 将其更改为Dim holdingdate as string已解决了问题,现在日期作为一个字符串传递,Access可以愉快地吃,担心美国/英国日期。