筛选区域粘贴值失败:运行时错误1004(多选区无法操作)求解
解决筛选后多选区复制粘贴的运行时错误1004
当筛选后用SpecialCells(xlCellTypeVisible)获取可见单元格时,如果结果是多个不连续的选区,直接执行PasteSpecial就会触发运行时错误1004,提示"This action won't work on multiple selections"。下面给两种可行的解决办法:
方案一:循环处理每个不连续区域
通过遍历可见区域的每个子区域(Area),逐个完成复制粘贴操作,规避多选区直接粘贴的限制:
ws.Range("A:F").AutoFilter Field:=5, Criteria1:="TBD" LR = ws.Cells(Rows.Count, 2).End(xlUp).Row ws.Columns("C").Insert With ws.Range("B2:B" & LR) .Offset(, 1).Formula = "=LEFT(B2,3) & ""-"" & RIGHT(B2,6)" ' 获取C列和B列的可见子区域集合 Dim srcAreas As Areas, destAreas As Areas Set srcAreas = ws.Range("C2:C" & LR).SpecialCells(xlCellTypeVisible).Areas Set destAreas = ws.Range("B2:B" & LR).SpecialCells(xlCellTypeVisible).Areas ' 逐个区域复制粘贴值 Dim i As Integer For i = 1 To srcAreas.Count srcAreas(i).Copy destAreas(i).PasteSpecial xlPasteValues Next i End With Application.CutCopyMode = False ' 清除剪贴板状态 ws.Columns("C").Delete
方案二:直接赋值,跳过复制粘贴
这种方法更高效,不需要插入辅助列,直接在B列可见单元格中计算并写入结果,彻底避免复制粘贴操作:
ws.Range("A:F").AutoFilter Field:=5, Criteria1:="TBD" LR = ws.Cells(Rows.Count, 2).End(xlUp).Row ' 直接对B列可见单元格计算并赋值 With ws.Range("B2:B" & LR).SpecialCells(xlCellTypeVisible) .Value = .Parent.Evaluate("LEFT(" & .Address & ",3) & ""-"" & RIGHT(" & .Address & ",6)") End With ws.AutoFilterMode = False ' 关闭筛选
内容的提问来源于stack exchange,提问作者Adam___
相关产品推荐
相关产品推荐

