如何修改Worksheet_Change宏,使其仅复制单元格的值与格式而非公式
如何修改Worksheet_Change宏,使其仅复制单元格的值与格式而非公式
我懂你的需求啦——你现有的这个Worksheet_Change宏功能是正常的,但复制整行的时候会把单元格里的公式也带过去,现在想要改成只复制值和格式,对吧?其实不用大动原代码的逻辑,只需要修改复制粘贴的核心代码就行。
原代码里的Rows(ans).Copy Sheets("open").Rows(Lastrow)是直接执行默认的复制粘贴操作,会把单元格的所有属性(包括公式、验证规则等)都复制过去。我们可以改用Excel的PasteSpecial方法,精准指定只粘贴值和格式。
修改后的完整代码
Private Sub Worksheet_Change(ByVal Target As Range) 'Modified 2/22/2020 11:42:10 AM EST If Target.Cells.CountLarge > 1 Or IsEmpty(Target) Then Exit Sub If Target.Column = 31 Then Dim Lastrow As Long Lastrow = Sheets("Open").Cells(Rows.Count, 13).End(xlUp).Row + 1 Dim ans As Long ans = Target.Row If Target.Value = "Y" Then ' 先复制目标行 Rows(ans).Copy ' 仅粘贴值和格式到目标位置 Sheets("open").Rows(Lastrow).PasteSpecial Paste:=xlPasteValuesAndFormats ' 清除剪贴板的复制状态,避免Excel一直显示复制标记 Application.CutCopyMode = False End If End If End Sub
关键修改说明
- 把原来一步到位的复制粘贴拆成了三步:先复制行,再用
PasteSpecial指定粘贴类型为xlPasteValuesAndFormats(这个枚举值会同时粘贴单元格的显示值和格式,完全排除公式),最后清除剪贴板状态,让操作更整洁。 - 如果你需要更精细的控制(比如先粘贴值再单独调整格式),也可以分开执行两次
PasteSpecial:Sheets("open").Rows(Lastrow).PasteSpecial Paste:=xlPasteValues Sheets("open").Rows(Lastrow).PasteSpecial Paste:=xlPasteFormats
不过用xlPasteValuesAndFormats一次完成会更高效。
这样修改后,宏就只会复制单元格的显示内容和格式,不会把公式带过去了,你可以直接编译运行试试,应该就能正常工作啦。
备注:内容来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

