VBA复制粘贴筛选结果触发Run Time error '438'错误如何解决
VBA粘贴触发Run-time error '438'错误排查解决
错误根本原因
Range对象本身没有Paste方法,Paste是工作表对象的方法,你直接对Pastesheet.Columns("E:E")调用Paste,自然触发对象不支持属性/方法的报错。- 之前新建工作表不报错的原因是你之前的写法大概率是先激活新工作表、选中目标列再调用Paste,误调用了工作表层面的Paste方法,刚好没有触发异常。
最优解决方案:直接用Copy方法的Destination参数
无需选中对象、无需调用剪贴板,运行效率更高,同时明确指定AutoFit的所属工作表,避免默认取活动工作表导致逻辑错误:
Dim Pastesheet As Worksheet Set Pastesheet = ThisWorkbook.Worksheets("Date") ThisWorkbook.Worksheets("Sheet1").ListObjects("Table14").Range.AutoFilter Field:=11, Criteria1:= _ ">=9/13/2021", Operator:=xlAnd, Criteria2:="<=9/19/2021" ' 合并复制粘贴步骤,直接指定目标位置 ThisWorkbook.Worksheets("Sheet1").Range("J:J").Copy Destination:=Pastesheet.Range("E1") Pastesheet.Columns("E:E").EntireColumn.AutoFit
特殊场景兼容:如果需要保留剪贴板粘贴的写法
调整为调用工作表的Paste方法即可:
ThisWorkbook.Worksheets("Sheet1").Range("J:J").Copy Pastesheet.Columns("E:E").Select Pastesheet.Paste Pastesheet.Columns("E:E").EntireColumn.AutoFit
额外注意
你当前的写法会复制J列的所有单元格(包括筛选后隐藏的行),如果你只需要复制筛选后的可见行,需要调整复制范围为:ThisWorkbook.Worksheets("Sheet1").Range("J:J").SpecialCells(xlCellTypeVisible).Copy
内容的提问来源于stack exchange,提问作者NANA
相关产品推荐
相关产品推荐

