You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实验室库存工作簿VBA需求:选中实验室后自动转移对应行数据

实验室库存数据自动转移VBA代码完善方案

核心实现功能

  • 当Master表M列选中目标实验室名称时,自动将该行A-G列数据同步到对应实验室工作表的最后一行
  • 支持物品跨实验室转移:若该物品已存在于其他实验室表中,会先从原表删除,再同步到新选中的实验室表
  • 基于物品唯一标识(默认A列)匹配数据,确保转移准确性

完整VBA代码

将以下代码粘贴到Master工作表的代码模块中(按Alt+F11打开VBA编辑器,双击左侧工程窗口里的Master表):

Private Sub Worksheet_Change(ByVal Target As Range)
    ' 仅处理M列的单单元格修改
    If Target.Column <> 13 Or Target.Cells.Count > 1 Then Exit Sub
    
    Dim wsTarget As Worksheet
    Dim wsSource As Worksheet
    Dim lastRow As Long
    Dim findRow As Range
    Dim itemID As String
    Dim labName As String
    
    ' 关闭事件触发,避免循环执行
    Application.EnableEvents = False
    
    ' 获取当前物品唯一ID(A列)和目标实验室名称
    itemID = Target.Offset(0, -12).Value ' A列是第1列,M列是13列,偏移-12
    labName = Target.Value
    
    ' 跳过空值
    If itemID = "" Or labName = "" Then
        Application.EnableEvents = True
        Exit Sub
    End If
    
    ' 检查目标实验室工作表是否存在
    On Error Resume Next
    Set wsTarget = ThisWorkbook.Worksheets(labName)
    On Error GoTo 0
    If wsTarget Is Nothing Then
        MsgBox "不存在名为" & labName & "的工作表,请检查名称!", vbExclamation
        Application.EnableEvents = True
        Exit Sub
    End If
    
    ' 遍历所有实验室工作表,查找并删除该物品的旧记录
    For Each wsSource In ThisWorkbook.Worksheets
        ' 跳过Master表和目标表
        If wsSource.Name <> "Master" And wsSource.Name <> labName Then
            Set findRow = wsSource.Columns(1).Find(What:=itemID, LookIn:=xlValues, LookAt:=xlWhole)
            If Not findRow Is Nothing Then
                findRow.EntireRow.Delete
            End If
        End If
    Next wsSource
    
    ' 将数据复制到目标实验室表的最后一行
    lastRow = wsTarget.Cells(wsTarget.Rows.Count, "A").End(xlUp).Row + 1
    Target.Offset(0, -12).Resize(1, 7).Copy ' 复制A-G列(共7列)
    wsTarget.Cells(lastRow, "A").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
    Application.CutCopyMode = False
    
    ' 可选:清空Master表当前行的M列,避免重复触发
    Target.ClearContents
    
    ' 恢复事件触发
    Application.EnableEvents = True
End Sub

使用说明

  1. 确保所有实验室工作表的名称(如Lab 01)与Master表M列的下拉选项完全一致,大小写、空格都要匹配
  2. 默认以A列作为物品唯一标识,若你的唯一标识在其他列,修改代码中itemID = Target.Offset(0, -12).Value的偏移量(比如B列就是-11)
  3. 测试前请备份工作簿,避免数据丢失

注意事项

  • 如果不需要自动删除原实验室的记录,可以删除代码中遍历所有实验室工作表的循环部分
  • 若需要保留Master表M列的选择记录,删除Target.ClearContents这一行
  • 代码仅处理单单元格修改,批量修改M列不会触发,如需批量处理可单独写批量执行的宏

内容的提问来源于stack exchange,提问作者Yeshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 02:17:01