Excel VBA -下标超出范围错误(运行时间:错误9)

cczfrluj  于 2023-01-21  发布在  其他
关注(0)|答案(1)|浏览(137)

我在尝试使用Cells.Find函数时得到运行时error (9) Subscript out of range
根据官方文件,只有几种可能的原因:

  • 引用了不存在的数组元素
  • 声明了一个数组,但没有指定元素数
  • 引用了不存在的集合成员
  • 对集合使用!运算符时,!隐式指定键

这里有一些代码,似乎与我有关,也许有人有一个想法:

Dim Partner As Worksheet
Dim rangePartner As Range
Set Partner = Worksheets("Partner")
Set rangePartner = Range(Partner.Cells(2, 2), Partner.Cells(2, 2).End(xlDown))
    
Dim partnerid As String  
Dim segment As String
    
With rangePartner
    segment = Cells.Find(partnerid, LookIn:=Values, SearchOrder:=xlByRows).Offset(0, 3)
End With

另外,如果SidoO.能给予我一个提示,如何避免偏移方法与查找功能相结合,请随意拍摄。:)
正在浏览论坛和官方文档以排除原因。检查作业和拼写1000次,但无法找出问题的原因...
此外,我排除了Offset方法,以查看这是否会导致不同的错误。

hgqdbh6s

hgqdbh6s1#

Set rangePartner = Range(Partner.Cells(2, 2), Partner.Cells(2, 2).End(xlDown))需要Range的显式父对象,否则它将使用活动工作表,如果该工作表不是Partner,则会导致问题,因为cells使用Partner
您的With当前未执行任何操作,您需要在cells之前添加一个.
LookIn:=Values应为xlvalues
不要在与Find相同的行中使用Range方法或属性。如果Find失败,则程序将出错,因为它返回一个没有属性或方法的空对象。
我没有看到partnerid的值。
总的来说是这样的:

Dim Partner As Worksheet
Dim rangePartner As Range
Set Partner = Worksheets("Partner")

With Partner
    Set rangePartner = .Range(.Cells(2, 2), .Cells(2, 2).End(xlDown))
End With
Dim partnerid As String 'This still needs a value assigned
Dim segment As Range
    
With rangePartner
    Set segment = .Cells.Find(partnerid, LookIn:=xlValues, SearchOrder:=xlByRows)
    If Not segment Is Nothing Then
        Set segment = segment.Offset(0, 3)
    End If
End With

相关问题