Access查询导出Excel后带格式发票号显示异常如何解决
Access导出Excel发票号实际值仅为数值的解决方案
问题根因
你目前在Access中仅为自动编号字段设置了显示格式,字段的底层存储值仍是纯数值,DoCmd.OutputTo 导出时会优先取字段的底层存储值,Excel中仅继承了显示格式,才会出现表面显示完整编号、编辑栏仅显示数值的问题。
方案1(推荐):修改查询直接生成文本型完整发票号
直接修改你导出用的查询 Qry_Test,将原自动编号的发票号字段替换为拼接好的文本型字段,示例字段表达式:发票号: "Binu/21-22/" & Format([原自动编号发票号字段名],"0000")
修改后查询返回的发票号本身就是完整的文本字符串,再用原DoCmd.OutputTo代码导出,Excel单元格的实际值就会是完整的发票号,无需额外操作。
方案2:VBA导出后批量修改Excel单元格值
如果不方便修改原查询,可以在导出后通过VBA调用Excel批量替换对应列的内容,示例代码:
' 原导出代码,将最后一个参数改为False先不打开文件 DoCmd.OutputTo acOutputQuery, "Qry_Test", acFormatXLSX, sFileName, False ' 调用Excel修改内容 Dim xlApp As Object, xlBook As Object, xlSheet As Object Dim lastRow As Long, i As Long Const 发票号所在列 = "A" ' 修改为你实际的发票号列标,比如B、C等 Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(sFileName) Set xlSheet = xlBook.Sheets(1) ' 导出内容默认在第一个工作表 ' 获取该列最后一行行号 lastRow = xlSheet.Cells(xlSheet.Rows.Count, 发票号所在列).End(-4162).Row ' 遍历修改,跳过表头行(如果没有表头就从i=1开始) For i = 2 To lastRow xlSheet.Cells(i, 发票号所在列).Value = "Binu/21-22/" & Format(xlSheet.Cells(i, 发票号所在列).Value, "0000") Next ' 保存并打开文件,和原代码效果一致 xlBook.Save xlApp.Visible = True ' 释放对象 Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing
内容的提问来源于stack exchange,提问作者Binu
相关产品推荐
相关产品推荐

