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 – 确保你将它声明为一个Range
types – 你不一定要这样做,但是,这是一个很好的习惯。
第三,在分配诸如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)
引用不在Sheet1
上Cells(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不同的地址干杯
丹尼尔