按文件名日期复制文件异常求助:VBA代码复制旧文件问题
排查你的VBA文件复制问题
我帮你梳理下代码里的几个关键问题,这就是导致复制旧文件的核心原因:
- 变量赋值顺序完全搞反了:你在定义
Ipan2(也就是文件匹配规则)之前,就调用了Dir("G:" & Ipan2)——这时候Ipan2是空值,Dir会直接返回G:根目录下的第一个文件,根本不会按照你想要的日期规则去匹配,自然会复制到旧文件。必须把Dir调用放在日期和匹配规则赋值之后。 - 未定义的全局变量埋坑:代码里用到了
mGlobalDate和mFilePath,但完全没看到你对这两个变量的定义和赋值。如果mGlobalDate不是你期望的日期,生成的目标文件名会出错;如果mFilePath路径不对,甚至可能导致复制失败或者文件跑到错误位置。 Dir匹配规则不够精准:你的Ipan2写的是"*_CP*" & myDate1 & "S1.TXT*",多余的*可能会匹配到不符合规则的文件,而且大小写敏感的环境下,.TXT和.txt可能不兼容,建议改成精准匹配的"*_CP" & myDate1 & "S1.txt"。- 缺少循环处理多文件场景:如果
G:下有多个匹配规则的文件,当前代码只会复制第一个,一旦第一次Dir返回旧文件,就会一直复制错误的内容。
下面是修正后的代码,你可以直接参考使用:
Option Explicit ' 强制变量声明,避免拼写错误 Sub iSeries() Dim yesterdayDate As String Dim targetFileName As String Dim sourceFilePattern As String Dim sourceFileName As String Dim sourceRootPath As String Dim targetRootPath As String ' 1. 先定义核心参数:日期、路径、匹配规则 yesterdayDate = Format(Date - 1, "yymmdd") sourceRootPath = "G:\" ' 明确根目录,避免路径歧义 targetRootPath = "C:\YourActualTargetFolder\" ' 替换成你的真实目标路径 sourceFilePattern = "*_CP" & yesterdayDate & "S1.txt" ' 精准匹配文件名规则 targetFileName = "157782_panama_iseries_" & yesterdayDate & ".txt" ' 用前一天日期生成目标文件名 ' 2. 获取第一个匹配的文件 sourceFileName = Dir(sourceRootPath & sourceFilePattern) On Error GoTo ErrorHandler ' 3. 循环复制所有匹配的文件(如果有多个) Do While sourceFileName <> "" FileCopy sourceRootPath & sourceFileName, targetRootPath & targetFileName ' 如果需要避免覆盖目标文件,可以在这里加重命名逻辑,比如加序号 sourceFileName = Dir ' 获取下一个匹配文件 Loop Exit Sub ErrorHandler: MsgBox "复制出错:" & Err.Description, vbExclamation End Sub
额外给你几个实用建议:
- 始终在代码开头加
Option Explicit,能帮你揪出变量拼写错误这类低级问题。 - 复制前可以先检查目标文件是否存在,避免误覆盖重要内容。
- 给变量起有意义的名字,比如
yesterdayDate代替myDate1,后续维护起来更省心。
内容的提问来源于stack exchange,提问作者Rhyfelwr
相关产品推荐
相关产品推荐

