Excel vba简单范围/对象错误
所以我认为我掌握了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
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)