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

时间:2011-08-05 14:29:40

标签: excel vba excel-vba

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

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

正如您可能猜到的那样,表格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

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

Sheet = ActiveWorkbook.Worksheets("foobar")

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

5 个答案:

答案 0 :(得分:6)

底线:

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

SheetWorkbookRange是对象。因此,在将它们分配给变量时,需要使用Set

Range.Value会返回一个Variant(可以是长号,字符串等)。因此,不能使用Set

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

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

要检查此项,请右键单击它,然后单击“定义”。声明为Variant可能会解决问题(但要注意它可能导致的副作用)。

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

*我知道这些类型不是'原始';为了解释清洁,我在这里举了一个例子。

答案 1 :(得分:2)

为您指定一个对象

Sheet = ActiveWorkbook.Worksheets("foobar") 

应该阅读

Set Sheet = ActiveWorkbook.Worksheets("foobar")

答案 2 :(得分:1)

在你的行

Cell = ActiveWorkbook.Worksheets("foobar").Cells(i, 3).Value

您正在尝试将单元格的值(可能是字符串)分配给单元格。关闭.Value,分配应该更好。您遇到的Excel消息不是最好的:有时您在分配错误类型的变量时会得到它。

但是,If Cell Like可能无效。 (提示:.Value必须移动,而不是删除。)

答案 3 :(得分:0)

我刚刚尝试了以下代码,它可能在您的代码中运行,确保ActiveWorkBook实际上是您想要的Active Work书(如果您正在使用多个工作簿)

Sub test()
i = 3
If ActiveWorkbook.Worksheets("Sheet1").Cells(i, 2).Value Like ":" Then
    MsgBox "I found a colon!"
Else
    MsgBox "didn't find a colon!"
End If

Cell = ActiveWorkbook.Worksheets("Sheet1").Cells(i, 2).Value
'fails right here
If Cell Like ":" Then
    MsgBox "I found a colon!"
End If
End Sub

答案 4 :(得分:0)

使用Dim MyCell as Variant(或作为字符串),因为Cell是现有对象