如何在VBA中使用宏获取Excel各软件对应的最新记录数据
Excel 版本控制工具 Overview 页自动同步最新记录 VBA 实现方案
前置假设(和你描述的表结构完全对齐,若有差异可按后面的说明修改)
All Records Sheet列顺序:A列=软件名称、B列=新版本号、C列=员工姓名、D列=更新说明、E列=日期,首行为表头,数据从第2行开始,新提交记录默认追加到表的最后一行Overview Sheet固定3个软件分别在第2、3、4行(A2=Software_one、A3=Software_two、A4=Software_three),列顺序和All Records Sheet完全一致,首行为表头
完整VBA代码
Sub SyncLatestSoftwareVersion() Dim wsRecords As Worksheet, wsOverview As Worksheet Dim lastRowRecords As Long, i As Long, j As Long Dim softwareName As String ' 绑定工作表,直接使用你定义的表名 Set wsRecords = ThisWorkbook.Worksheets("All Records Sheet") Set wsOverview = ThisWorkbook.Worksheets("Overview Sheet") ' 获取All Records Sheet最后一行有效数据的行号 lastRowRecords = wsRecords.Cells(wsRecords.Rows.Count, "A").End(xlUp).Row ' 遍历Overview页的3个固定软件(行号2到4) For i = 2 To 4 softwareName = wsOverview.Cells(i, "A").Value ' 从All Records最后一行倒序查找,第一个匹配的就是最新提交的记录 For j = lastRowRecords To 2 Step -1 If wsRecords.Cells(j, "A").Value = softwareName Then ' 匹配成功后同步对应字段 wsOverview.Cells(i, "B").Value = wsRecords.Cells(j, "B").Value wsOverview.Cells(i, "C").Value = wsRecords.Cells(j, "C").Value wsOverview.Cells(i, "D").Value = wsRecords.Cells(j, "D").Value wsOverview.Cells(i, "E").Value = wsRecords.Cells(j, "E").Value ' 找到后直接跳出循环,查找下一个软件 Exit For End If Next j ' 无对应软件的提交记录时清空原有内容,不需要可删除此行 If j < 2 Then wsOverview.Range("B" & i & ":E" & i).ClearContents Next i ' 同步完成提示,不需要可删除此行 MsgBox "最新版本记录同步完成", vbInformation End Sub
绑定按钮使用步骤
- 按
Alt + F11调出VBA编辑器,右键左侧工程栏你的工作簿名称,选择「插入」-「模块」,把上述代码粘贴到空白模块中 - 保存文件为
.xlsm格式(启用宏的工作簿) - 回到
Overview Sheet,点击「开发工具」-「插入」-「表单控件(按钮)」,在页面合适位置绘制按钮,弹出的宏选择窗口选中SyncLatestSoftwareVersion,确认即可
自定义修改说明
- 列顺序不匹配的话,直接修改代码里对应的列字母即可,比如版本号存在
All Records Sheet的C列,就把wsRecords.Cells(j, "B").Value中的B改为C - 后续新增固定软件的话,修改
For i = 2 To 4的结束行号即可,比如新增第4个软件在第5行,就改为For i = 2 To 5
内容的提问来源于stack exchange,提问作者vcb0127
相关产品推荐
相关产品推荐

