如何迭代Excel / VBA中的一系列单元格?

时间:2017-12-17 13:22:32

标签: vba loops for-loop

Dim works As Worksheet
Set works = ThisWorkbook.Sheets("Sheet1")
Dim txt As Variant

myrange = works.Range("C1:C9")

For Each txt In myrange
        If InStr(1, txt, "£", vbTextCompare) > 0 Then
            Debug.Print txt.Value                    '<..Object required err
            Debug.Print works.Range("C" & txt).Value '<..Object required err
            Debug.Print works.Cells(txt, 1).Value    '<..Object required err
            Debug.Print txt.Offset(0, 1).Value       '<..Object required err

    End If

Next txt

我正在尝试获取包含“£”的单元格的值,然后将其删除。在任何情况下我都会得到`对象定义的错误。我尝试了3种不同的选项,但仍然出现错误。我是VBA的新手,还在学习。我该如何解决这个问题,为什么我会收到错误?

1 个答案:

答案 0 :(得分:1)

一个问题是第myrange = works.Range("C1:C9")行。它之前应该有Set,例如:

Set myrange = works.Range("C1:C9")

这样您可以确保进行引用分配,而不是赋值。没有它,你告诉VBA你希望单元格的值放在变量中。有了它,你告诉VBA你希望你的变量指向那个范围。

由于您未明确声明myrangeRange对象,因此VBA隐式声明Variant并将其视为String。因此,在循环中,txt也是String,而不是您预期的Range。因此你的错误。

如果您在开头有Dim myrange As Range,那么没有Set的作业就会失败,您已经立即修复了。

但是有一个简单的习惯可以防止出现这种错误:在模块的顶部插入Option Explicit。这样,您必须明确声明 ALL 您的变量,这意味着VBA不会假设它们是Variant

您甚至可以通过查看Tools > Options中的相关选项来自动生成。