2014-03-29 53 views
0

我是一位在Excel环境下学习VBA的3周新手(在我30年前在Pascal上完最后一门编程课程之后)。我不明白为什么有时执行一些代码引用表单需要激活表单。我的具体问题,通过一些玩具代码:需要Excel VBA表单激活吗?

Public Sub Test() 
Dim Rng As Range 
Set Rng = Worksheets("Sheet2").Range(Cells(1, 1), Cells(5, 1)).Find(What:="Prize",LookIn:=xlValues) 
If Rng Is Nothing Then 
    MsgBox "Nothing there" 
Else 
    MsgBox "Found the prize" 
End If 
End Sub 

如果我把测试(),而Sheet1中是有效的(通过在Sheet1用户窗体说)我得到一个“定义或对象定义的错误应用”。如果Sheet2处于活动状态,代码将正常运行。

为什么Sheet2必须处于活动状态才能执行此代码?我可以通过激活Sub2内的Sheet2然后再次激活Sheet 1来解决这个问题,但这看起来很笨拙。有没有更好的办法?

感谢您的帮助!我在我的实际代码中遇到了类似这样的其他激活问题。

+1

'细胞()'没有工作预选赛总是指ActiveSheet。你需要使用'Worksheets(“Sheet2”)。Cells(...)' –

回答

1

由于您没有为单元格指定工作表,因此该对象将引用活动工作表。但是您的范围明确定义为引用Sheet 2。由于存在冲突,因此会出现错误。

使用语法,你可以这样做:

With Worksheets("Sheet2") 
    Set Rng = range(.Cells(1,1),.Cells(5,1)).Find(... 
end with 
+0

谢谢!我误解了Cells()所做的。 – user3474688