VBA实现行归档时仅粘贴数值、不复制公式的代码修改方案
VBA整行归档仅粘贴数值的修改方案
原代码使用默认整行复制逻辑,会携带单元格所有属性(包括公式、数据验证、条件格式等)同步到目标表,只需调整复制粘贴的调用逻辑,即可实现仅粘贴数值、不携带公式的效果。
修改后完整代码
Sub ArchiveReworked() Dim xRg As Range Dim xCell As Range Dim i As Long Dim j As Long Dim K As Long i = Worksheets("Quality Log").UsedRange.Rows.Count j = Worksheets("Actioned").UsedRange.Rows.Count If j = 1 Then If Application.WorksheetFunction.CountA(Worksheets("Actioned").UsedRange) = 0 Then j = 0 End If Set xRg = Worksheets("Quality Log").Range("Q4:Q" & i) Application.ScreenUpdating = False For K = 1 To xRg.Count If CStr(xRg(K).Value) = "Yes" Then ' 复制源行 xRg(K).EntireRow.Copy ' 目标位置仅粘贴数值 Worksheets("Actioned").Range("A" & j + 1).PasteSpecial Paste:=xlPasteValues ' 清空剪贴板,退出复制状态 Application.CutCopyMode = False ' 删除源表对应行 xRg(K).EntireRow.Delete If CStr(xRg(K).Value) = "Yes" Then K = K - 1 End If j = j + 1 End If Next Call ResizeArchiveTable Application.ScreenUpdating = True End Sub
关键修改说明
- 替换了原代码中
xRg(K).EntireRow.Copy Destination:=xxx的全量复制写法,拆分为复制、选择性粘贴两个步骤,通过Paste:=xlPasteValues参数指定仅粘贴单元格计算后的值,完全不会带入源单元格的公式。 - 新增
Application.CutCopyMode = False语句,粘贴完成后立刻清空剪贴板,避免后续操作受复制状态影响,也能减少内存占用。 - 移除了原代码中全局生效的
On Error Resume Next语句,该语句会无差别屏蔽所有运行错误提示,出现逻辑异常时很难定位问题,无特殊需求不建议全局开启。 - 如果需要同步保留源行的单元格格式,可以在粘贴数值的语句后新增一行代码
Worksheets("Actioned").Range("A" & j + 1).PasteSpecial Paste:=xlPasteFormats,该操作仅粘贴格式,不会携带公式。
内容的提问来源于stack exchange,提问作者Tomas Joe Gemine
相关产品推荐
相关产品推荐

