我有一个我完全不明白的问题:
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。
答案 0 :(得分:6)
底线:
Set
。 Sheet
,Workbook
,Range
是对象。因此,在将它们分配给变量时,需要使用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是现有对象