如何在VBA中为Access表的DateTime字段正确赋值
VBA给Access表DateTime字段赋值的解决方案
核心错误排查
- 首先修正测试取值的变量名拼写错误:你定义的Recordset对象名为
readingSet,后续测试取值时写的reading!ReadingDate属于变量名写错,读取的是其他无关对象的值,所以得到的6/29/2021和空值等错误结果都和赋值逻辑无关。 - 不要在
readingSet.Update执行前读取Recordset缓存中未提交的字段值,此时读取结果没有参考意义,应该执行Update后重新查询表数据校验结果。
正确赋值方法
方法1:显式调用Value属性赋值
避免隐式成员调用的转换坑,直接给字段的Value属性赋值:
readingSet.AddNew readingSet!jobinstrumentimportid = jobInstImportId ' 显式指定Value属性 readingSet!ReadingDate.Value = CDate("10/13/2021 4:05:05 PM") readingSet!readingTime = lineArray(1) readingSet!decibelreading = CDbl(lineArray(2)) readingSet.Update
方法2:使用VBA日期字面量避免区域解析问题
如果CDate受系统区域日期格式影响解析出错,可以直接用#包裹日期字面量,完全绕过CDate的转换逻辑:
readingSet!ReadingDate.Value = #10/13/2021 16:05:05#
方法3:临时变量中转赋值
如果还是有问题,可以先把日期值存到Date类型临时变量再赋值,进一步规避隐式转换问题:
Dim readDate As Date readDate = CDate("10/13/2021 4:05:05 PM") readingSet!ReadingDate.Value = readDate
附加排查项
- 确认表中
ReadingDate字段类型确实为「日期/时间」,没有设置特殊的验证规则、输入掩码限制输入 - 确认VBA代码中没有开启
On Error Resume Next忽略了赋值时抛出的错误
内容的提问来源于stack exchange,提问作者Doug Kimzey
相关产品推荐
相关产品推荐

