我正在尝试编写代码,该代码查看(“输入表”)中活动列中的行是否与不同工作表(“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
答案 0 :(得分:2)
正如评论中所提到的,您需要限定对ActiveSheet
和ActiveWorkbook
的隐式引用。 Rubberduck(免责声明:我大量参与了这个[免费和开源] VBE加载项的开发)会发现这个问题:
成员'单元'隐式引用ActiveSheet
这意味着:
Sheets("Sheet2").Range(Cells(2, 1), Cells(131, 1))
真的这样做了:
ActiveWorkbook.Sheets("Sheet2").Range(ActiveSheet.Cells(2, 1), ActiveSheet.Cells(131, 1))
当Sheet2不是活动工作表时,这就是你的代码崩溃的方式。
然后还有其他问题:
我想提请你注意局部变量'“Sheet2”'未声明检查结果。请注意,双引号被解析为标识符名称的一部分 - 由于某种原因,您使用的是引号。 VBA字符串文字必须以ASCII 34分隔,即"
- 其他任何内容都不会被选为字符串文字分隔符。
变量y
为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
参数作为{{1}参数,并且由于RowIndex
是y
,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列中的数据。看它是否与(输入表)中的特定单元格的内容相匹配,&如果有的话,执行一个动作。
干杯