Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA不循环已筛选行_Vba_Excel - Fatal编程技术网

VBA不循环已筛选行

VBA不循环已筛选行,vba,excel,Vba,Excel,我有一个很大的excel文件,可以自动执行一些流程。今天,我发现其中一个专栏出现了问题,我需要修复它。为了解决这个问题,我在下面生成了这段代码来过滤列N,以显示所有的“#N/A”。对于筛选的行,我想检查并查看右2列的偏移量是否具有值“Available”。如果是这样,我希望循环遍历所有列N,并将“#N/A”替换为“unknown”。但我生成的代码只适用于第一个过滤单元,不会循环 Sub tess() ActiveSheet.Range("$C$1:$AR$468").AutoFilter Fie

我有一个很大的excel文件,可以自动执行一些流程。今天,我发现其中一个专栏出现了问题,我需要修复它。为了解决这个问题,我在下面生成了这段代码来过滤列N,以显示所有的“#N/A”。对于筛选的行,我想检查并查看右2列的偏移量是否具有值“Available”。如果是这样,我希望循环遍历所有列N,并将“#N/A”替换为“unknown”。但我生成的代码只适用于第一个过滤单元,不会循环

Sub tess()
ActiveSheet.Range("$C$1:$AR$468").AutoFilter Field:=12, Criteria1:="#N/A"

ActiveSheet.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells(, 12).Select

Dim lr
lr = ActiveSheet.UsedRange.Rows.CountLarge

For Each cell In Range("n1:n" & lr)
If ActiveCell.Value = CVErr(xlErrNA) And ActiveCell.Offset(, 2).Value = "Available" Then

  ActiveCell.Value = "Unkown Person"

  End If
Next cell

End Sub

谢谢。

您应该在For循环中引用“cell”,而不是“ActiveCell”。

您应该在For循环中引用“cell”,而不是“ActiveCell”。

您可以通过添加另一个筛选器来避免循环:

Sub tess()
    With ActiveSheet.Range("$C$1:$AR$468")
        .AutoFilter Field:=12, Criteria1:="#N/A"
        .AutoFilter Field:=14, Criteria1:="Available"
        If Application.WorksheetFunction.Subtotal(103, .Columns(12)) > 1 Then .Offset(1, 11).Resize(.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible).Value = "Unkown Person"
        .Parent.AutoFilterMode = False
    End With
End Sub

您可以通过添加另一个筛选器来避免循环:

Sub tess()
    With ActiveSheet.Range("$C$1:$AR$468")
        .AutoFilter Field:=12, Criteria1:="#N/A"
        .AutoFilter Field:=14, Criteria1:="Available"
        If Application.WorksheetFunction.Subtotal(103, .Columns(12)) > 1 Then .Offset(1, 11).Resize(.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible).Value = "Unkown Person"
        .Parent.AutoFilterMode = False
    End With
End Sub

太好了,它能用。非常感谢。为什么我的不起作用呢?这是因为Excel开发人员在他的回答中解释的:你通过“cell”迭代器变量在一系列单元格中循环,但在循环中你使用的是“ActiveCell”,而“ActiveCell”一直在引用同一个单元格(循环前选择激活的单元格)完美,它起作用了。非常感谢。为什么我的不起作用?这是因为Excel开发人员在他的回答中解释的:您通过“cell”迭代器变量在一系列单元格中循环,但在循环中您使用的是“ActiveCell”,而“ActiveCell”一直在引用同一个单元格(在循环之前由Select激活的单元格)