VBA简单范围/对象错误(vba simple range/object error)

2019-10-17 06:55发布

所以我想我有VBA的OK把握,但现在这个错误真的缠着我,我不能找出问题。 下面是一个极短的子程序(从一个模块运行):

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:我要改变我的问题有点像我了解有关对象的事情,但我做什么用的“发现”的方法使用它。 因此,这里的代码:

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

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

Answer 1:

好。 你有几个问题。

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不成功。



Answer 2:

的一点是, lr = Sheets(1).Range("a1", Cells(65, 1))返回一个范围对象。
重视的对象 。 所以,你需要使用set在一开始,丹尼尔一样。
当你分配一个对象而不set ,Excel使用默认的属性,它是Range.Value。 所以转让不抛出一个错误,只能作为一个对象不使用LR。



Answer 3:

可能是你的范围定义是不正确的......不知道你想什么来实现有,但张(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

会弹出不同的地址干杯

丹尼尔



文章来源: vba simple range/object error