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的新手,还在学习。我该如何解决这个问题,为什么我会收到错误?
答案 0 :(得分:1)
一个问题是第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
。这样,您必须明确声明 ALL 您的变量,这意味着VBA不会假设它们是Variant
。
您甚至可以通过查看Tools > Options
中的相关选项来自动生成。