繁体   English   中英

VBA中Cell.Offset与ActiveCell.Offset的行为

[英]Behavior of Cell.Offset versus ActiveCell.Offset in VBA

我在VBA中有一个For循环和For Each循环,在其中使用Offset在循环的每个单元格内容中搜索一个字符串:

对于每个使用:

Lastrow = ActiveSheet.Range("A2").End(xlDown).Row
Set Myrange = ActiveSheet.Range("M2:M" & Lastrow)

countrows = Cells(Cells.Rows.Count, "A").End(xlUp).Row

For Each Cell In Myrange 
    If strPattern <> "" Then
    If Cell.Offset(0, 31) <> "Fizz" Then
        strInput = Cell.Value

用于:

countrows = Cells(Cells.Rows.Count, "A").End(xlUp).Row

For i = 1 To countrows
    Range("AK" & i).Select
    check_value = ActiveCell
    If ActiveCell.Offset(0, 7) <> "Buzz" Then
        ActiveCell.EntireRow.Copy

在底部的示例中,我必须使用ActiveCell.Offset。 使用Cell.Offset或什至Cell.Offset.Value都会引发“ Object Required”错误。

为什么会这样呢?

在下面的示例中,您尚未定义Cell是什么,因此VBA不了解您要执行的操作。 Cell不是一个特殊的单词-在最上面的示例中它是一个变量

编写底部语句的更好方法是使用With代替ActiveCellSelect

countrows = Cells(Cells.Rows.Count, "A").End(xlUp).Row

For i = 1 To countrows
    With Range("AK" & i)
        check_value = .Value2
        If .Offset(0, 7) <> "Buzz" Then
            .EntireRow.Copy
        End If
    End With
Next i

在第一个循环中,Cell是一个Range对象。
在第二个Cell中, Nothing必须为其分配一个Range对象,即:

Set Cell = Range("AK" & i)

顺便说一句,您是否声明变量?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM