Excel vba简单范围/对象错误

Excel vba简单范围/对象错误,excel,vba,object,range,Excel,Vba,Object,Range,所以我认为我掌握了VBA,但现在这个错误真的困扰着我,我无法找出问题所在。 下面是一个非常短的子例程(从模块运行): 无论出于何种原因,这都会引发“应用程序定义/对象定义错误” 有人能解释一下吗 编辑: 这也引发了同样的错误: MsgBox Sheets(1).Range("a1", Cells(65, 1)).Address 编辑2: 我将稍微改变一下我的问题,因为我了解对象,但我知道如何使用“find”方法。 下面是代码: Set lookrange = Sheets(1).Range(C

所以我认为我掌握了VBA,但现在这个错误真的困扰着我,我无法找出问题所在。 下面是一个非常短的子例程(从模块运行):

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

有人能解释一下吗

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

MsgBox Sheets(1).Range("a1", Cells(65, 1)).Address
编辑2: 我将稍微改变一下我的问题,因为我了解对象,但我知道如何使用“find”方法。 下面是代码:

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

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

可能您的范围定义不正确…不确定您试图在那里实现什么,但是工作表(1)。范围(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
会弹出不同的地址吗 干杯


Daniel

关键是
lr=Sheets(1).Range(“a1”,Cells(65,1))
返回一个Range对象。
强调对象。因此,您需要在开始时使用
set
,就像Daniel所做的那样。

当您在不设置
的情况下指定该对象时,Excel将使用默认属性Range.Value。因此,赋值不会抛出错误,只是将lr作为对象使用。

确定。你有几个问题

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
声明为对象类型-确保将其声明为类型
范围
-您不必这样做,但是,这是一种很好的做法

第三,您需要使用
设置
,正如其他人在分配对象(如
范围
值)时所指出的那样,否则您将始终得到该错误


关于你问题的第二部分

MsgBox Sheets(1).Range("a1", Cells(65, 1)).Address
将此更改为

With Sheets(1)
    MsgBox .Range(.Range("A1"), .Cells(65, 1)).Address
End With
如果从不同于
Sheet1
的工作表运行此操作,则会出现错误,因为
单元格(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
失败,则上面的第二条语句(查找
的结果)将导致错误。

当然,但上面的代码不是我的程序,这只是导致问题的原因。我需要使用单元格(x,x)方法,因为范围的底部不是固定的,我打算用一个变量替换65。address方法也不相关,我只是不知道为什么它不起作用,无论是作为对象还是作为范围。您可以通过使用set lr=sheets(1)。range(“A1:a”和variablename)为65使用变量使用相同的表示法。但是,您的“编辑”行不应抛出错误,由于OP在VBA中相对较新(理论上),您是否建议他在工作表(1)
中使用
,而不是在一行中使用
工作表(1)
3次?它更漂亮,也不会让我畏缩。
Set lookrange = Sheets(1).Range(Cells(2, 1), Cells(200, 1))
Set result = lookrange.Find(what:=searchTerm, lookat:=xlWhole)