对于每个控制variables必须是变体或对象

真的很新的VBA在这里…我环顾四周,试图拼凑一些代码,以满足我的需要。 认为它几乎在那里,但我得到的错误可能容易克服,但我不知道如何。

代码查看当前工作表(STOCK),并从单元格A2获取“目标”文本值。 然后它在另一个表“其他”中search一个命名范围。 如果确定Other中的其中一个单元格('cand')等于目标值,则在原始目标的同一行上的STOCK表格的G列将应用“True”值。

希望这是有道理的。 我已经复制了代码,这可能会让事情更清楚。

 Dim target As String Dim cand As String Dim currentrow As Integer Sub search_named_range()'这个范围是硬编码的; 我们可以尝试A:如果硬编码版本工作'对于每个目标在工作表(“STOCK”)。范围(“A2:A1000”)'检索当前范围的行,用于设置目标值'currentrow =范围(target).Row'FOR循环searchMojave中零件编号的范围'For Each cand In Worksheets(“Other”)。Range(“N9:N150”)如果StrConv(cand.Value,2)= StrConv(target, 2)然后工作表(“STOCK”)。范围(“G”+ currentrow)=“真”转到前端如果下一步cand'如果部分没有find,什么都不做,返回find下一个目标'FORend:Next target End Sub 

目前,我收到错误“对于每个控制variables必须是变体或对象”,但无法find任何解释为什么这是。 我相信这是很明显的,但一个steer将非常​​感激。

谢谢。

For Each中不能使用Stringvariables。 您在For Each循环中使用tartgetcand作为控制variables,但是您已将它们定义为string。 他们需要成为一个对象,特别是一个包含你正在迭代的对象集合的对象。 你正在迭代范围的集合,所以你的控制variables需要是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 

其他没有更正错误的更改:

我不知道你为什么在sub之外声明你的variables,但我把它们放在里面。

您不需要在For Each行的末尾定义.Cells ,但我喜欢。 您可以遍历.Rows.Columns.Areas与Range(虽然.Cells是默认值)。

StrConvert没有问题,但是也可以使用LCase(),或者像我一样,使用StrComp。

由于我已经有一个对当前行(rCell)的单元格的引用,我使用该和Offset来填充我想要的列。