VBA运行时Selection.Paste语句报错无法完成粘贴如何解决?
错误原因
- 复制操作后立即执行
Application.CutCopyMode = False清空了剪贴板内容,导致无数据可粘贴 - Range对象不存在
Paste方法,方法调用错误 - 代码大量使用
Select,容易因为工作表激活状态异常触发错误 - 排序范围写死为固定行,后续数据量增加后会出现排序不全的问题
修正后的代码
Sub AddNewRow() Dim wsLive As Worksheet, wsMaster As Worksheet Dim nextRow As Long, lastSortRow As Long ' 绑定工作表对象,避免后续反复调用名称 Set wsLive = ThisWorkbook.Worksheets("Live Data") Set wsMaster = ThisWorkbook.Worksheets("Master Sheet") ' 获取Master Sheet下一次粘贴的起始行 nextRow = wsMaster.Range("A" & wsMaster.Rows.Count).End(xlUp).Offset(1).Row ' 直接复制可见单元格到目标位置,不需要选中操作 wsLive.Cells.SpecialCells(xlCellTypeVisible).Copy Destination:=wsMaster.Range("A" & nextRow) ' 获取Master Sheet C列最后一行,动态设置排序范围 lastSortRow = wsMaster.Range("C" & wsMaster.Rows.Count).End(xlUp).Row ' 执行排序逻辑 With wsMaster.AutoFilter.Sort .SortFields.Clear .SortFields.Add2 Key:=wsMaster.Range("C1:C" & lastSortRow), _ SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With ' 清理对象 Set wsLive = Nothing Set wsMaster = Nothing End Sub
修正说明
- 提前绑定工作表对象,全程不使用
Select操作,不会因为工作表切换问题报错 - 复制时直接指定目标位置,不需要手动操作剪贴板,自动跳过清空剪贴板的错误逻辑
- 排序范围改为动态获取,适配数据量变化的场景
- 所有Range操作都绑定了对应的工作表对象,不会出现默认调用当前活动工作表的隐含错误
内容的提问来源于stack exchange,提问作者Breandan McCann
相关产品推荐
相关产品推荐

