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

多条件数据迁移VBA需求:DA9状态判断与数据复制

调整后的VBA代码及说明

以下是适配需求的完整VBA代码,已处理工作表保护、标识替换和仅粘贴值的要求:

Sub TransferData()
    Dim wsGiris As Worksheet
    Dim wsData As Worksheet
    Dim targetRow As Long
    
    ' 定义工作表对象
    Set wsGiris = ThisWorkbook.Worksheets("Giriş")
    Set wsData = ThisWorkbook.Worksheets("Data")
    
    ' 解除两个工作表的保护(密码12345)
    wsGiris.Unprotect Password:="12345"
    wsData.Unprotect Password:="12345"
    
    ' 判断Giriş工作表DA9的值
    Select Case wsGiris.Range("DA9").Value
        Case "None"
            ' 找到Data工作表BY列下方首个空行
            targetRow = wsData.Cells(wsData.Rows.Count, "BY").End(xlUp).Row + 1
            If targetRow < 3 Then targetRow = 3 ' 确保从BY3下方开始
            
            ' 复制区域并仅粘贴值
            wsGiris.Range("DD9:DX11").Copy
            wsData.Range("BY" & targetRow).PasteSpecial Paste:=xlPasteValues
            Application.CutCopyMode = False ' 清除复制模式
            
        Case "Exists"
            ' 弹出提示
            MsgBox "Record exists", vbInformation, "提示"
    End Select
    
    ' 重新保护工作表
    wsGiris.Protect Password:="12345", UserInterfaceOnly:=True ' UI仅保护,允许VBA后续操作
    wsData.Protect Password:="12345", UserInterfaceOnly:=True
End Sub

关键修改说明

  • 标识替换:将原代码中判断的土耳其语Yok/Var替换为需求指定的None/Exists
  • 工作表保护处理:操作前后自动解除/重新保护工作表,密码为12345;使用UserInterfaceOnly:=True确保后续VBA操作无需重复解除保护
  • 仅粘贴值:使用PasteSpecial xlPasteValues替代直接粘贴,避免复制原区域的公式,只保留计算后的值
  • 目标行定位:通过End(xlUp)精准找到BY列的最后一行,确保数据粘贴到首个空单元格,同时处理初始空表的情况(默认从BY3下方开始)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:20:04