使用活动列元素的下标超出范围错误

时间:2017-03-31 15:56:38

标签: excel vba excel-vba

我正在尝试编写代码,该代码查看(“输入表”)中活动列中的行是否与不同工作表(“Sheet2”)中某个范围内的单元格内容相匹配。

如果内容匹配,代码将把单元格的内容直接带到(“Sheet2”)中的单元格右侧。将其放入(“输入表”)中活动列的第39行。

我知道这很可能与代码的范围部分有关,但实际上并没有任何解决方案。

任何帮助都将不胜感激。

Sub yellowgrey()

Dim y As Range

With y = Sheets("Sheet2").Range(Cells(2, 1), Cells(131, 1))



If Sheets("Input Sheet").Cells(38, ActiveCell.Column).Value = Sheets(“Sheet2”).Cells(y, 1) Then


Sheets("Input Sheet").Cells(39, ActiveCell.Column) = Sheets("Sheet2").Cells(y, 2)


End If

End With


End Sub

2 个答案:

答案 0 :(得分:2)

正如评论中所提到的,您需要限定ActiveSheetActiveWorkbook的隐式引用。 Rubberduck(免责声明:我大量参与了这个[免费和开源] VBE加载项的开发)​​会发现这个问题:

RD code inspections results

  

成员'单元'隐式引用ActiveSheet

这意味着:

Sheets("Sheet2").Range(Cells(2, 1), Cells(131, 1))

真的这样做了:

ActiveWorkbook.Sheets("Sheet2").Range(ActiveSheet.Cells(2, 1), ActiveSheet.Cells(131, 1))

当Sheet2不是活动工作表时,这就是你的代码崩溃的方式。

然后还有其他问题:

More RD code inspection results

我想提请你注意局部变量'“Sheet2”'未声明检查结果。请注意,双引号被解析为标识符名称的一部分 - 由于某种原因,您使用的是引号。 VBA字符串文字必须以ASCII 34分隔,即" - 其他任何内容都不会被选为字符串文字分隔符。

变量yRange,其引用需要使用Set关键字进行分配。

With ThisWorkbook.Worksheets("Sheet2")

    Set y = .Range(.Cells(2, 1), .Cells(131, 1)    
    '...

End With

以后如果使用y这样:

Sheets("Sheet2").Cells(y, 2)

您传递y所代表的单元格/范围的,因为.Cells调用将y参数作为{{1}参数,并且由于RowIndexy,VBA隐式提取其默认属性(即Range),这使得赋值完全依赖于{ {1}}包含...除Range.Value不仅仅是一个单元格,因此完全不清楚您在此处尝试实现的目标。

答案 1 :(得分:0)

谢谢你们,在你的帮助下,我已经修好了它:

Sub yellowgrey()

Dim hh As Long

With Sheets("Sheet2")
    For hh = 2 To 131 Step 1
        If Sheets("Input Sheet").Cells(38, ActiveCell.Column).Value = Sheets("Sheet2").Cells(hh, 1) Then
            Sheets("Input Sheet").Cells(39, ActiveCell.Column) = Sheets("Sheet2").Cells(hh, 2)
        End If
    Next hh
End With

End Sub

目标是循环(Sheet2)&的第1列中的数据。看它是否与(输入表)中的特定单元格的内容相匹配,&如果有的话,执行一个动作。

干杯