Range.SpecialCells(xlCellTypeVisible)是否失效?Office365 Excel复制问题求助
复制筛选状态下的整列所有值(Office 365 Excel 2208)
问题说明
你遇到的不是SpecialCells(xlCellTypeVisible)被废弃,而是Office 365 2208版本调整了默认复制行为:当区域处于筛选状态时,直接调用Range.Copy会自动只复制可见单元格,和调用SpecialCells(xlCellTypeVisible)的效果一致。
无需遍历的解决方案
方案1:临时取消筛选后复制,再恢复筛选
通过记录当前筛选状态,复制完成后还原,既保证复制全量数据,又不破坏原有筛选设置:
Dim isFiltered As Boolean ' 记录Sheet1是否处于筛选状态 isFiltered = Sheets("Sheet1").AutoFilterMode ' 临时取消筛选 If isFiltered Then Sheets("Sheet1").AutoFilterMode = False ' 复制全量数据到Sheet2的B1开始位置 Sheets("Sheet1").Range("A2:A31").Copy Sheets("Sheet2").Range("B1") ' 恢复原筛选状态 If isFiltered Then Sheets("Sheet1").Range("A1").AutoFilter
方案2:直接赋值区域值,绕开复制的可见单元格限制
利用Range.Value直接赋值的方式,不受筛选状态影响,效率更高:
Dim sourceRange As Range Set sourceRange = Sheets("Sheet1").Range("A2:A31") ' 将源区域的值直接赋值给目标区域,自动匹配行数 Sheets("Sheet2").Range("B1").Resize(sourceRange.Rows.Count, 1).Value = sourceRange.Value
这种方法不会复制格式,若需要同时复制格式,可以改用Range.Copy配合PasteSpecial,但需要先取消筛选(同方案1)。
内容的提问来源于stack exchange,提问作者stinky
相关产品推荐
相关产品推荐

