vba简单范围/对象错误

时间:2012-10-03 15:15:07

标签: excel vba object range

所以我认为我对VBA有一个很好的把握,但现在这个错误真的让我烦恼,我无法弄清楚问题。 这是一个非常短的子程序(从模块运行):

Sub test()
    Dim lr
    lr = Sheets(1).Range("a1", Cells(65, 1))
    MsgBox lr.Address
End Sub

无论出于何种原因,这都会引发“应用程序定义/对象定义错误”

任何人都可以解释一下吗?

编辑: 这也引发了同样的错误:

MsgBox Sheets(1).Range("a1", Cells(65, 1)).Address

EDIT2: 我将稍微改变一下我的问题,因为我理解对象的东西,但我用“find”方法使用它。 所以这是代码:

Set lookrange = Sheets(1).Range(Cells(2, 1), Cells(200, 1))
Set result = lookrange.Find(what:=searchTerm, lookat:=xlWhole)

在这种情况下,它告诉我lookrange导致问题。

3 个答案:

答案 0 :(得分:3)

确定。你有几个问题。

Option Explicit
sub test()
    Dim lr as Range
    set lr = Sheets(1).Range("a1", Cells(65, 1))
    MsgBox lr.Address
End Sub

首先,作为VBA新手的人,使用Option Explicit几乎总是位于模块的顶部,因此您需要对变量进行尺寸标注。

其次,您永远不会将lr声明为对象类型 - 请确保将其声明为类型Range - 您不一定必须这样做,但是,这是一个好习惯

第三,您需要使用其他人在分配set值等对象时指示的Range,否则您将始终收到该错误。


在问题的第二部分。

MsgBox Sheets(1).Range("a1", Cells(65, 1)).Address

将此更改为

With Sheets(1)
    MsgBox .Range(.Range("A1"), .Cells(65, 1)).Address
End With

如果您从不同于Sheet1的工作表运行此操作,则会出现错误,因为Cells(65,1)引用不会出现在Sheet1上 - Excel会认为您的意思是当前的工作表


第三部分

Set lookrange = Sheets(1).Range(Cells(2, 1), Cells(200, 1))
Set result = lookrange.Find(what:=searchTerm, lookat:=xlWhole)

与第二部分有同样的问题。另请注意,如果找不到result,则完全有可能会运行错误,如果Find不成功,上面的第二条语句(Find的结果)将导致错误。

答案 1 :(得分:0)

可能你的范围定义不正确...不确定你想要在那里实现什么但是sheet(1).range(myrange)返回一个范围对象。

Sub tetPop()

    Call popAddress(10, 12)
    Call popAddress(14, 21)
    Call popAddress(11, 18)

End Sub

Sub popAddress(ByVal row As Integer, ByVal col As Integer)

    Dim lr As Range

    Set lr = Sheets(1).Range("a1", Cells(row, col))
    MsgBox lr.Address

    ' or better and direct
    MsgBox Sheets(1).Range("a1", Cells(row, col)).Address

End Sub

弹出不同的地址 干杯

丹尼尔

答案 2 :(得分:0)

重点是lr = Sheets(1).Range("a1", Cells(65, 1))返回一个范围对象 强调对象。所以你需要在开始时使用set,就像Daniel所做的那样 在没有set的情况下分配该对象时,Excel使用默认属性Range.Value。因此赋值不会抛出错误,只使用lr作为对象。