在Excel中引用单元格和工作表

use*_*971 2 excel vba excel-vba

我有一个我完全不明白的问题:

i = 150
If ActiveWorkbook.Worksheets("foobar").Cells(i, 3).Value Like "*:*" Then
  MsgBox "I found a colon!"
End If
Run Code Online (Sandbox Code Playgroud)

正如您可能猜到的那样,表格foobar在位置(150,3)处有一个包含冒号的单元格,因此会显示消息框.

现在我想这样做:

i = 150
Cell = ActiveWorkbook.Worksheets("foobar").Cells(i, 3).Value 'fails right here
If Cell Like "*:*" Then
  MsgBox "I found a colon!"
End If
Run Code Online (Sandbox Code Playgroud)

这里给出了一个错误,说"对象变量或没有设置块变量.实际上说:

Sheet = ActiveWorkbook.Worksheets("foobar")
Run Code Online (Sandbox Code Playgroud)

给出了类似的信息.为什么?我究竟做错了什么?我只想要一个对象的引用,或者至少是一个refence.

Tia*_*oso 6

底线:

  • 处理对象时,请使用Set.
  • 处理原始数据(整数,长整数,字符串*,变体*)时,不要使用它.

Sheet,Workbook,Range,都是对象.因此,Set在将它们分配给变量时需要使用.

A Range.Value返回Variant(可以是long,一个字符串等)所以,你不能使用Set.

==========================

现在,关于你的错误消息......我会说,在你的代码之前,可能Cell 会被声明为对象.尝试使用另一个变量名,或检查Cell变量类型.

要检查这一点,请右键单击它,然后单击"定义".声明它Variant可能会解决问题(但要注意它可能导致的副作用).

==========================

*我知道这些类型不是"原始的"; 为了解释清洁,我在这里作为一个例子.