这里对 VBA 真的很陌生......我环顾四周并尝试拼凑一些代码来满足我的需求。我认为已经差不多了,但我遇到的错误可能很容易克服,但我不知道如何克服。
该代码查看当前工作表 (STOCK),并从单元格 A2 中获取“目标”文本值。然后,它在另一个工作表“其他”中搜索命名范围。如果它确定“Other”中的一个单元格(“cand”)等于目标值,则“True”值将应用于 STOCK 工作表中原始目标同一行上的 G 列。
希望这是有道理的。我已经复制了代码,这可能会让事情变得更加清晰。
Dim target As String
Dim cand As String
Dim currentrow As Integer
Sub search_named_range()
' This range is hard coded; we can try A:A if hard code version works '
For Each target In Worksheets("STOCK").Range("A2:A1000")
' retrieve the row of the current range, for use when setting target values '
currentrow = Range(target).Row
' FOR loop to search range of part numbers in Mojave '
For Each cand In Worksheets("Other").Range("N9:N150")
If StrConv(cand.Value, 2) = StrConv(target, 2) Then
Worksheets("STOCK").Range("G" + currentrow) = "True"
GoTo FORend
End If
Next cand
' If part is not found, do nothing and return to find next target '
FORend: Next target
End Sub
目前,我收到错误“对于每个控制变量必须是变体或对象”,但找不到任何地方可以解释原因。我确信这是很明显的,但如果有一只小牛的话我会非常感激。
Thanks.
不能在 For Each 中使用字符串变量。你正在使用tartget
and cand
作为 For Each 循环中的控制变量,但您已将它们定义为字符串。它们必须是一个对象,特别是包含您正在迭代的对象集合的对象。您正在迭代一个范围,该范围是范围的集合,因此您的控制变量需要是 Range 对象。
Sub search_named_range()
Dim rCell As Range
Dim rCand As Range
For Each rCell In Worksheets("STOCK").Range("A2:A1000").Cells
For Each rCand In Worksheets("Other").Range("N9:N150").Cells
If StrComp(rCand.Value, rCell.Value, vbTextCompare) = 0 Then
rCell.Offset(0, 6).Value = "True"
Exit For 'exits the rCand For, but no the rCell one
End If
Next rCand
Next rCell
End Sub
其他未纠正错误的更改:
我不知道为什么你在子外部声明你的变量,但我把它们放在里面。
你不需要定义.Cells
在 For Each 行的末尾,但我喜欢这样做。你可以迭代.Rows
or .Columns
or .Areas
有一个范围(虽然.Cells
是默认值)。
StrConvert 没有任何问题,但您也可以使用 LCase() 或像我一样使用 StrComp。
由于我已经引用了当前行 (rCell) 上的单元格,因此我使用它和 Offset 来填充我想要的列。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)