工作簿间数据传输报错排查:Runtime Error 1004与变量设置问题
嘿,这个问题其实很好定位——你用固定值能正常运行,说明代码的核心逻辑(数据传输)是没问题的,问题出在变量生成的目标文件名和实际存在的工作簿名称不匹配,导致Excel找不到目标文件,触发了1004错误。下面是几个最可能的变量设置问题:
日期格式不匹配
比如你的MyMonth变量拿到的是数字(比如"2"),但实际文件名里是月份全称("February");或者MyCage里的日期分隔符用了/,但真实文件名用的是-。这种格式差异会让Excel找不到对应的文件。变量值的格式不符合预期
举个例子:如果你的代码里用MyMonth = Month(Date)获取月份数字,但实际文件名需要的是英文全称;或者系统区域设置是中文,MonthName返回的是中文月份名,和文件名里的英文不匹配,自然会报错。日期的前置零缺失
比如8号当天,Day(Date)返回的是"8",但实际文件名里是"08",这时候生成的文件名就变成MainTest 8-February-2018,和真实的MainTest 08-February-2018对不上,Excel自然找不到文件。拼接文件名时的空格/字符错误
比如你拼接MyCage时,MainTest后面少了空格,或者多了多余的符号,导致生成的文件名和真实名称有细微差异,这也是常见的坑。
快速排查与解决
你可以在变量赋值后加一行调试代码,把生成的文件名打印出来,和真实文件名对比:
Debug.Print "生成的目标文件名:" & MyCage
打开VBA编辑器的立即窗口(按Ctrl+G)就能看到输出,一看就知道哪里不匹配了。
比如要匹配你手动写的MainTest 08-02-2018格式,正确的变量赋值应该是这样:
Dim MyYear As String, MyMonth As String, MyCage As String MyYear = CStr(Year(Date)) MyMonth = MonthName(Month(Date), False) ' 确保返回月份全称,比如February ' 用Format函数给日期补前置零,保证是两位数字 MyCage = "MainTest " & Format(Day(Date), "00") & "-" & MyMonth & "-" & MyYear
这样生成的文件名就和你手动指定的完全一致,应该就能解决1004错误了。
内容的提问来源于stack exchange,提问作者Rookie

