[英]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.