繁体   English   中英

如何在Excel / VBA中的单元格范围内进行迭代?

[英]How to iterate over a range of cells in Excel/VBA?

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的新手,仍然在学习。 如何解决此问题,为什么会出现错误?

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

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

这样,您可以确保进行的是参考分配,而不是值分配。 没有它,您将告诉VBA您希望将单元格的值放入变量中。 有了它,您就告诉VBA您希望变量指向该范围。

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

如果您在一开始就有Dim myrange As Range ,则没有Set的分配将会失败,并且您将立即修复它。

但是有一个防止这种错误的简单习惯:在模块顶部,插入Option Explicit 这样,您必须显式声明所有变量,这意味着VBA不会假定它们是Variant

您甚至可以通过选中“ Tools > Options的相关选项来使其自动化。

暂无
暂无

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

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