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

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

如果内容匹配,代码会将单元格的内容直接放到(“Sheet2”)单元格的右侧,并将其放入(“Input Sheet”)中的活动列的第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 

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

RD代码检查结果

成员“单元格”隐式引用ActiveSheet

意即:

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

真的是这样做的:

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

这就是每当Sheet2不是活动工作表时代码崩溃的原因。


那么还有其他一些问题:

更多的RD代码检查结果

我想把你的注意力转移到局部variables“Sheet2”没有被宣布的检查结果。 请注意,双引号被parsing为标识符名称的一部分 – 出于某种原因,您正在使用curl引号。 VBAstring文字必须用ASCII 34分隔,即" – 其他任何东西都不作为string文字分隔符。

variablesy是一个Range ,它的引用需要用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参数作为RowIndex参数,并且因为y是一个Range ,所以VBA隐式地获取其默认属性 (即Range.Value ),使得任务完全依赖于y包含的内容…除了y不仅仅是一个单元格,所以你完全不清楚你在这里实现了什么。

谢谢你们,在你们的帮助下,我已经解决了它:

 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)第一列中的数据并查看它是否与(input表)中特定单元格的内容相匹配,并且如果是,则执行一个操作。

干杯