如何从名称相似的工作簿中自动提取指定最新工作簿数据到TES_Workbook
实现TES_Workbook自动抓取AKS最新文件数据的解决方案
你可以根据自己的使用习惯选择以下两种方案:
方案1:VBA脚本实现全自动刷新(支持打开文件自动触发)
操作步骤如下:
- 打开TES_Workbook,按
Alt+F11调出VBA编辑器 - 右键点击左侧项目列表里的当前工作簿名称,选择「插入>模块」
- 将下方代码粘贴到模块编辑区,按照注释修改对应路径、工作表名和数据范围
Sub 抓取最新AKS文件数据() Dim folderPath As String, fileName As String Dim regEx As Object, latestDate As Long, latestFile As String Dim wbSource As Workbook, wsTarget As Worksheet ' 下方修改为你的AKS文件实际存放的文件夹路径 folderPath = "C:\Users\XXX\Desktop\AKS文件存放文件夹\" Set regEx = CreateObject("VBScript.RegExp") regEx.Pattern = "\d{8}" ' 匹配文件名中的8位日期数字,兼容带/不带下划线的命名格式 latestDate = 0 ' 遍历文件夹下所有AKS开头的Excel文件 fileName = Dir(folderPath & "AKS*.xls*") Do While fileName <> "" If regEx.test(fileName) Then currentDate = CLng(regEx.Execute(fileName)(0)) If currentDate > latestDate Then latestDate = currentDate latestFile = fileName End If End If fileName = Dir Loop If latestFile = "" Then MsgBox "未找到符合命名规则的AKS文件" Exit Sub End If ' 读取最新文件数据,下方按需修改工作表名和数据范围 Set wbSource = Workbooks.Open(folderPath & latestFile) Set wsTarget = ThisWorkbook.Sheets("数据存放表") ' 修改为TES_Workbook里存数据的工作表名 wbSource.Sheets("源数据表").Range("A1:Z2000").Copy wsTarget.Range("A1") ' 修改为实际需要抓取的范围 wbSource.Close SaveChanges:=False MsgBox "数据已从 " & latestFile & " 成功更新" End Sub
- 如果你需要打开TES_Workbook时自动执行抓取,可在VBA编辑器的
ThisWorkbook对象里添加代码:Private Sub Workbook_Open() Call 抓取最新AKS文件数据 End Sub
方案2:Power Query无代码配置(适合不熟悉VBA的用户)
操作步骤如下:
- 打开TES_Workbook,点击顶部菜单栏「数据>获取数据>自文件>自文件夹」,选择存放AKS文件的文件夹后点击确定
- 待加载出文件夹内所有文件列表后,点击「名称」列的筛选按钮,选择「文本筛选>开头为」,输入
AKS后确定,过滤掉非AKS开头的文件 - 点击「添加列>自定义列」,输入公式
=Text.Select([Name],{"0".."9"}),确定后会生成仅包含文件名里数字的新列,也就是我们需要的日期序列 - 选中新生成的自定义列,点击「降序排序」,排序后第一行就是日期最新的AKS文件
- 右键点击第一行的
Content单元格,选择「作为新查询添加」,后续按照指引加载对应工作表的数据即可 - 后续需要更新数据时,直接点击顶部菜单栏「数据>全部刷新」即可自动抓取当前最新的AKS文件数据
补充说明:如果文件名里的日期和文件实际上传日期不一致,你可以直接对文件列表的「修改日期」列做降序排序,取第一行文件即可,不需要额外提取文件名里的日期。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

