VBA - “For Each”语法 - 行和表内部枚举器

时间:2015-10-26 17:29:59

标签: vba

我不了解以下的Excels行为: 1.这很好(cell被定义为范围对象,但实际上是一个用于循环范围的单元格:For Each cell In MyTable):

For i = 1 To Len(CompetID)
    If InStr(1, cell.Offset(0, colOff), Mid(CompetID, i, 1), vbTextCompare) > 0 Then
        cell.Interior.ColorIndex = 4
    End If
Next i

但是,这会导致InStr行上的类型不匹配错误:

For Each RowCell In HelpTable.Rows(helpRow)
    If InStr(1, RowCell, Mid(BrandID, 1, 1), vbTextCompare) > 0 Then
        cell.Interior.ColorIndex = 3
    End If
Next RowCell

RowCell是一个范围,就像cell一样;在立即窗口中双重检查。 BrandID是一个长度为1的字符串 - 也是已检查过的。为了以防万一,我使用了Mid函数来强制字符串。 HelpTable.Rows(helpRow)也可以正常工作 - 之前使用选择进行检查。

RowCell可能为空,但根据MSDN,该函数应返回“0”。

我还尝试使用Str(RowCell)RowCell.Value,但这导致了Excel崩溃。

我显然遗漏了一些东西,但我无法弄清楚是什么。任何帮助深表感谢。

1 个答案:

答案 0 :(得分:1)

RowCell每行执行一次,.Value包含整行(在表格边框内)。

Range或多个广告Variant/ArrayInStr。这不能传递给For Each RowCell In HelpTable.Rows(helpRow).Cells

使用{{1}}遍历行的单元格。