首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cell.Offset与ActiveCell.Offset在VBA中的行为

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

Stack Overflow用户
提问于 2017-06-01 15:21:44
回答 2查看 875关注 0票数 0

我有一个For循环&对于VBA中的每个循环,其中我使用偏移量在循环中的每个单元格的内容中搜索一个字符串:

为每一项使用:

代码语言:javascript
复制
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

用于:

代码语言:javascript
复制
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都会引发“所需的对象”错误。

为什么是这种情况?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-01 15:26:47

在下面的示例中,您还没有定义Cell是什么,所以VBA不知道您想要做什么。Cell不是一个特殊的词,在最上面的例子中它是一个变量

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

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2017-06-01 15:26:15

在第一个循环单元格中是一个范围对象。

在第二个单元格是Nothing时,必须为它分配一个Range对象,即:

代码语言:javascript
复制
Set Cell = Range("AK" & i)

顺便说一句,你有声明你的变量吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44311520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档