vba简单范围/对象错误

所以我觉得我对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 

编辑2:我要改变我的问题,因为我了解对象的事情,但我用什么来使用“查找”方法。 所以这里是代码:

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

在这种情况下,它告诉我lookrange是造成一个问题。

好。 你有几个问题。

 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 ,因此需要对variables进行维度定义。

其次,你永远不要把lr声明为一个对象types – 确保你将它声明为一个Rangetypes – 你不一定要这样做,但是,这是一个很好的习惯。

第三,在分配诸如Range值之类的对象时,你需要像别人指示的那样使用set ,否则你总会得到那个错误。


到你的问题的第二部分。

 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)引用不在Sheet1Cells(65,1)会认为您的意思是当前工作表。


第三部分

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

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

重点是lr = Sheets(1).Range("a1", Cells(65, 1))返回一个范围对象。
强调客体 。 所以你需要像丹尼尔那样在开始时使用set
在您未指定对象的情况下,Excel使用默认属性Range.Value。 所以赋值不会抛出错误,只能使用lr作为对象。

可能你的范围定义是不正确的…不知道你想在那里实现,但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 

会popup不同的地址干杯

丹尼尔