求助:修改Excel VBA代码实现归档时仅粘贴值
修改后的VBA代码(仅粘贴值)
原代码使用Copy Destination会自动复制整行的格式、公式等内容,要实现仅粘贴值,需要拆分复制和粘贴操作,替换原有的复制语句即可。以下是修改后的完整代码:
Sub MoveRowsToNextTab() 'ExcelIsSimple Dim xRg As Range Dim xCell As Range Dim I As Long Dim J As Long Dim K As Long I = Worksheets("CSL").UsedRange.Rows.Count J = Worksheets("Archive").UsedRange.Rows.Count If J = 1 Then If Application.WorksheetFunction.CountA(Worksheets("Archive").UsedRange) = 0 Then J = 0 End If Set xRg = Worksheets("CSL").Range("C7:C" & I) On Error Resume Next Application.ScreenUpdating = False ' 从下往上循环避免漏行(原代码从上往下删除会导致索引偏移,这里优化循环方向) For K = xRg.Count To 1 Step -1 If CStr(xRg(K).Value) = "Closed" Then ' 复制整行 xRg(K).EntireRow.Copy ' 仅粘贴值到Archive工作表的目标位置 Worksheets("Archive").Range("A" & J + 1).PasteSpecial xlPasteValues ' 清除剪贴板状态,避免弹窗 Application.CutCopyMode = False ' 删除原行 xRg(K).EntireRow.Delete J = J + 1 End If Next Application.ScreenUpdating = True End Sub
关键修改说明
- 替换复制粘贴逻辑:去掉原代码中
Copy Destination的直接赋值,改为先复制整行,再用PasteSpecial xlPasteValues仅粘贴单元格值,彻底避免携带公式、格式或动态更新的内容。 - 优化循环方向:把原代码的从上往下循环改为从下往上(
For K = xRg.Count To 1 Step -1),避免删除行后导致后续行索引偏移,解决原代码可能出现的漏处理问题,同时可以去掉原有的K = K -1调整逻辑。 - 清除剪贴板:添加
Application.CutCopyMode = False,结束复制状态,避免Excel保留剪贴板内容并弹出提示。
内容的提问来源于stack exchange,提问作者Chris Finner
相关产品推荐
相关产品推荐

