我不了解以下的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崩溃。
我显然遗漏了一些东西,但我无法弄清楚是什么。任何帮助深表感谢。
答案 0 :(得分:1)
RowCell
每行执行一次,.Value
包含整行(在表格边框内)。
Range
或多个广告Variant/Array
是InStr
。这不能传递给For Each RowCell In HelpTable.Rows(helpRow).Cells
。
使用{{1}}遍历行的单元格。