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

VBA中Cell.Offset与ActiveCell.Offset的行为,vba,excel,Vba,Excel,我在VBA中有一个For循环&a 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

我在VBA中有一个For循环&a 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
Lastrow=ActiveSheet.Range(“A2”).End(xlDown).Row
设置Myrange=ActiveSheet.Range(“M2:M”和Lastrow)
countrows=单元格(Cells.Rows.Count,“A”).End(xlUp).Row
对于Myrange中的每个单元格
如果strPattern“”则
如果单元格偏移量(0,31)“嘶嘶”那么
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
countrows=单元格(Cells.Rows.Count,“A”).End(xlUp).Row
对于i=1到countrows
范围(“AK”&i)。选择
检查\u值=活动单元格
如果ActiveCell.Offset(0,7)“嗡嗡”那么
ActiveCell.EntireRow.Copy
在下面的示例中,我必须使用ActiveCell.Offset。使用Cell.Offset甚至Cell.Offset.Value会抛出“需要对象”错误


为什么会出现这种情况?

第一个循环中的单元格是范围对象。
在第二个单元格中,一个单元格为
,您必须为其指定一个范围对象,即:

Set Cell = Range("AK" & i)

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

在第一个循环中,单元格是一个范围对象。
在第二个单元格中,一个单元格为
,您必须为其指定一个范围对象,即:

Set Cell = Range("AK" & i)

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

在下面的示例中,您没有定义什么是
Cell
,因此VBA不知道您要做什么<代码>单元格不是一个特殊的词-在上面的示例中,它是一个变量

编写底部语句的更好方法是使用
With
而不是
ActiveCell
Select

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
countrows=单元格(Cells.Rows.Count,“A”).End(xlUp).Row
对于i=1到countrows
带范围(“AK”和“i”)
检查_值=.Value2
如果.Offset(0,7)“嗡嗡”那么
.EntireRow.Copy
如果结束
以
接下来我

在下面的示例中,您没有定义什么是
单元格
,因此VBA不知道您要做什么<代码>单元格不是一个特殊的词-在上面的示例中,它是一个变量

编写底部语句的更好方法是使用
With
而不是
ActiveCell
Select

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
countrows=单元格(Cells.Rows.Count,“A”).End(xlUp).Row
对于i=1到countrows
带范围(“AK”和“i”)
检查_值=.Value2
如果.Offset(0,7)“嗡嗡”那么
.EntireRow.Copy
如果结束
以
接下来我

我的猜测是因为在
For
循环中,您使用了“选择”,而在
For each
中,您具体地引用了单元格。我的猜测是因为在
For
循环中,您使用了“选择”,而在
For each
中,您具体地引用了单元格。