VBA执行SaveAs保存带YYYY-MM-DD时间戳文件时报类型不匹配错误
错误原因
- 核心问题出在
SaveAs方法的路径字符串语法错误:- 字符串拼接符
&被错误写在双引号内部,VBA无法识别变量拼接逻辑,会将整段当成普通文本处理 - 文件后缀
.xlsx直接跟在xStrDate变量后,相当于调用字符串变量不存在的xlsx属性,直接触发类型不匹配报错 - 路径换行的续行符
_前未加空格,不符合VBA语法规范
- 字符串拼接符
- 你写的日期格式化逻辑
VBA.Format(Now(), "yyyy-mm-dd")本身是正确的,mm、dd格式会自动给个位数的月、日补前导0,之前无前置0的问题是旧代码用了m/d格式导致的。
修正后的完整代码
Sub save2() 'APAC Application.ScreenUpdating = False Dim wb As Workbook Dim xStrDate As String Dim savePath As String Set wb = Workbooks.Add xStrDate = VBA.Format(Now(), "yyyy-mm-dd") ThisWorkbook.Sheets("APAC_Coming_Due").Copy Before:=wb.Sheets(1) ThisWorkbook.Sheets("APAC_Overdue").Copy Before:=wb.Sheets(1) ThisWorkbook.Sheets("APACCover").Copy Before:=wb.Sheets(1) wb.Sheets(1).Name = "APAC - IMPORTANT INFORMATION" wb.Sheets(2).Name = "Overdue" wb.Sheets(3).Name = "Due Date Approaching" Application.DisplayAlerts = False wb.Sheets("Sheet1").Delete Application.DisplayAlerts = True ' 改回默认配置,避免后续操作告警被屏蔽 ' 单独定义存储路径,更易排查语法问题 savePath = "\\xxxxx.xx.xxxxx.com\xxxxxx\xxxx\xxxxxxx\xxxxxx\xxxxxx\xxxxx\xxxx" & _ "\xxxxx\xxxx\xxx\APAC OverdueOutstanding - " & xStrDate & ".xlsx" ' 指定FileFormat避免xlsx格式存储报错,xlOpenXMLWorkbook对应无宏工作簿 wb.SaveAs Filename:=savePath, FileFormat:=xlOpenXMLWorkbook wb.Close SaveChanges:=False ' 已完成存储,跳过保存提示 Application.ScreenUpdating = True End Sub
内容的提问来源于stack exchange,提问作者Josh Hudson
相关产品推荐
相关产品推荐

