如何用VBA复制含固定文本RB的可变文件名文件数据(无需打开)
解决方法:自动选择包含“RB”的目标文件
Got it, let's adjust your VBA code to automatically locate the Excel file with "RB" in its name, instead of relying on a hardcoded filename. Here's the modified version with explanations:
完整修改后的代码
Sub DownloadRA() Dim targetPath As String Dim targetFileName As String Dim rgTarget As Range Dim sourceFormula As String ' 替换为你的目标文件夹实际路径 targetPath = "D:\2023 MOJE pliki tygodniowe\kopie zapasowe\" ' 查找文件夹中包含"RB"的Excel文件(通配符*匹配任意字符) targetFileName = Dir(targetPath & "*RB*.xlsx") ' 检查是否找到符合条件的文件 If targetFileName = "" Then MsgBox "未找到包含'RB'的Excel文件,请检查路径或文件名!", vbExclamation Exit Sub End If ' 设置当前工作簿中PASTEHERE工作表的目标区域 Set rgTarget = ThisWorkbook.Sheets("PASTEHERE").Range("B23:EA6000") ' 动态构建外部数据引用公式 sourceFormula = "='" & targetPath & "[" & targetFileName & "]Sheet1'!$B$23:$EA$6000" ' 写入公式并转换为静态值(避免外部链接) rgTarget.FormulaArray = sourceFormula rgTarget.Value = rgTarget.Value End Sub
关键修改点说明
- 自动查找文件:使用
Dir函数配合通配符*RB*.xlsx,可以快速定位目标文件夹中文件名包含“RB”的Excel文件。*代表任意长度的任意字符,所以*RB*会匹配所有文件名里有“RB”的xlsx文件。 - 错误处理:添加了判断逻辑,如果没找到符合条件的文件,会弹出提示框并终止程序,避免出现运行时错误。
- 更可靠的工作簿引用:把
ActiveWorkbook改成ThisWorkbook,确保始终指向运行这段代码的当前工作簿,而不是当前激活的其他工作簿。 - 动态公式构建:通过字符串拼接,把找到的文件名和路径自动插入到公式中,无需手动修改代码。
注意事项
如果目标文件夹中有多个包含“RB”的Excel文件,Dir函数会返回按名称排序的第一个文件。如果需要处理多个文件,可以添加循环逻辑遍历所有匹配的文件,不过从你的需求来看,应该是只有一个目标文件,所以当前代码足够使用。
内容的提问来源于stack exchange,提问作者nozu1984
相关产品推荐
相关产品推荐

