每个控制变量必须是变量或对象

Posted

技术标签:

【中文标题】每个控制变量必须是变量或对象【英文标题】:for each control variable must be variant or object 【发布时间】:2013-04-16 20:38:29 【问题描述】:

这里对 VBA 真的很陌生...我环顾四周并尝试拼凑一些代码来满足我的需求。认为它几乎就在那里,但我遇到了可能很容易克服但我不知道如何克服的错误。

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

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

将目标调暗为字符串
将糖果点心为字符串
将当前行变暗为整数

子 search_named_range()

    ' 这个范围是硬编码的;如果硬代码版本有效,我们可以尝试 A:A '
    For Each target In Worksheets("STOCK").Range("A2:A1000")

    ' 检索当前范围的行,用于设置目标值时 '
    currentrow = Range(target).Row

        ' FOR 循环在 Mojave 中搜索零件编号范围 '
        For Each cand In Worksheets("Other").Range("N9:N150")
            如果 StrConv(cand.Value, 2) = StrConv(target, 2) 那么
                Worksheets("STOCK").Range("G" + currentrow) = "True"
                转到 FORend
            万一
        下一个糖果

'如果没有找到零件,什么都不做,返回寻找下一个目标'
FORend:下一个目标

结束子

目前我收到错误消息“对于每个控制变量都必须是 Variant 或 Object”,但找不到任何地方可以解释为什么会这样。我敢肯定,这很明显,但我们会非常感谢您的指导。

谢谢。

【问题讨论】:

【参考方案1】:

您不能在 For Each 中使用字符串变量。您在 For Each 循环中使用 tartgetcand 作为控制变量,但您已将它们定义为字符串。它们需要是一个对象,特别是一个包含您正在迭代的对象集合的对象。您正在迭代一个范围,它是范围的集合,因此您的控制变量需要是 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 之外声明变量,但我把它们放在里面。

您不需要在 For Each 行的末尾定义 .Cells,但我喜欢这样做。您可以使用 Range 迭代 .Rows.Columns.Areas(尽管 .Cells 是默认值)。

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

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

【讨论】:

这绝对是完美的,非常感谢您的帮助!我现在可以看到我正在尝试的一些事情有点迂回(例如获取行号),而且我没有意识到您不能在 For Each 中使用字符串 - 非常感谢您对替代方法的解释和建议,代码现在就像我最初打算的那样工作。干杯!

以上是关于每个控制变量必须是变量或对象的主要内容,如果未能解决你的问题,请参考以下文章

在 Google Chrome 控制台中查看所有 JavaScript 变量的列表

循环和选择

JS变量,运算符,控制语句

MIB究竟是啥意思?

*CAD系统变量

0317-js变量数据类型运算符控制语句