多条件数据迁移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
相关产品推荐
相关产品推荐

