如何用If语句在过滤后行为空时跳过Selection.FormulaArray代码
解决过滤后无可见行时跳过公式设置的问题
直接用If判断结合错误处理就能实现需求,同时建议避免使用Select/Selection这类依赖选中状态的写法,改用对象引用更稳定。修改后的代码如下:
Dim visibleRange As Range ' 执行过滤操作 ActiveSheet.ListObjects("Study_Setup").Range.AutoFilter Field:=31, Criteria1 _ :=RGB(255, 255, 204), Operator:=xlFilterCellColor ' 尝试获取过滤后的可见数据行(跳过表头) On Error Resume Next Set visibleRange = ActiveSheet.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible) On Error GoTo 0 ' 判断是否存在可见行 If Not visibleRange Is Nothing Then ' 直接对目标单元格设置数组公式,无需选中 visibleRange.Cells(1, 30).FormulaArray = _ "=IFERROR(INDEX(RedaData!C[-29]:C[-9],MATCH(1,(RedaData!C[-26]=RC[-29])*(RedaData!C[-29]=RC[-26]),0),5),"""")" End If
关键说明:
On Error Resume Next用来捕获SpecialCells找不到可见单元格时的错误,避免代码崩溃Set visibleRange = ...尝试获取过滤后的可见区域,若没有可见行,visibleRange会是NothingIf Not visibleRange Is Nothing Then判断是否存在有效可见行,只有存在时才执行数组公式设置- 去掉了
Select和Selection,直接通过visibleRange.Cells(1,30)定位目标单元格,代码更健壮
内容的提问来源于stack exchange,提问作者Rachel Taylor
相关产品推荐
相关产品推荐

