日期格式为dd-mmm-yyyy时向MS Access导入数据的问题
问题解答
链接表的日期是否必须为dd/mm/yyyy格式?
不是。Access支持识别多种日期格式,但能否成功读取取决于系统区域设置、CSV字段定义以及Access的导入/链接配置。你遇到的#num错误是因为当前配置下Access无法解析dd-mmm-yyyy格式的日期字符串,而非该格式本身不被支持。
解决办法
以下是几种实用的解决方案,按推荐优先级排序:
1. 保存导入规格并使用导入而非链接表
链接CSV时Access的字段类型识别依赖自动检测,灵活性差。改用导入到临时表的方式,可手动指定日期格式:
- 打开Access,点击外部数据选项卡 → 导入并链接组 → 选择CSV文件。
- 在导入向导中,找到日期列,将其数据类型设置为
日期/时间,并在高级选项里指定输入格式为dd-mmm-yyyy。 - 完成导入后,勾选保存导入步骤,后续更新账目时直接调用保存的导入规格,再用追加查询将临时表数据导入交易表。
2. 在追加查询中用表达式转换日期
如果坚持用链接表,可在追加查询中通过表达式手动转换日期格式,避免#num错误:
- 打开追加查询设计视图,添加链接表的日期列,将字段名替换为:
如果系统区域设置不识别英文月份缩写,可自定义VBA函数进行转换:转换后日期: CDate([原始日期列])- 按
Alt+F11打开VBA编辑器,插入新模块,粘贴以下代码:Public Function ConvertBankDate(rawDate As String) As Date Dim dateParts() As String dateParts = Split(rawDate, "-") Dim monthNum As Integer Select Case UCase(dateParts(1)) Case "JAN": monthNum = 1 Case "FEB": monthNum = 2 Case "MAR": monthNum = 3 Case "APR": monthNum = 4 Case "MAY": monthNum = 5 Case "JUN": monthNum = 6 Case "JUL": monthNum = 7 Case "AUG": monthNum = 8 Case "SEP": monthNum = 9 Case "OCT": monthNum = 10 Case "NOV": monthNum = 11 Case "DEC": monthNum = 12 End Select ConvertBankDate = DateSerial(CInt(dateParts(2)), monthNum, CInt(dateParts(0))) End Function - 返回查询设计视图,将日期字段替换为:
转换后日期: ConvertBankDate([原始日期列]) - 将
转换后日期字段映射到交易表的日期列,执行追加查询即可。
- 按
3. 预处理CSV文件
- 用Excel打开下载的CSV文件,选中日期列,通过数据→分列功能,选择日期格式为
DMY,将dd-mmm-yyyy转换为dd/mm/yyyy后保存,再用Access链接该文件。 - 或用文本编辑器(如Notepad++)批量替换月份缩写为数字:例如将
-Jan-替换为-01-,-Feb-替换为-02-,以此类推,将日期格式改为dd-mm-yyyy,Access可自动识别。
4. 临时调整系统区域设置
- 打开Windows控制面板→区域→格式,临时将格式改为
英语(英国)或英语(美国),此时Access可直接识别dd-mmm-yyyy格式的日期。完成数据导入后再改回原区域设置。
内容的提问来源于stack exchange,提问作者Will M
相关产品推荐
相关产品推荐

