我不理解excel在以下方面的行为: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
是一个Range, cell
也是;在"立即"窗口中仔细检查了一下。BrandID
是长度为1的字符串-也检查。我使用Mid
函数只是以防万一,以强制字符串。
HelpTable.Rows(helpRow)
也可以正常工作。
RowCell
可以是空的,但是根据MSDN,它应该在函数上返回"0"。
我也尝试使用Str(RowCell)
和RowCell.Value
,但这导致Excel崩溃。
我显然错过了什么,但我不知道是什么。非常感谢任何帮助。
For Each RowCell In HelpTable.Rows(helpRow)
每行执行一次,RowCell
包含整行(在表边界内)
.Value
或多cell Range
是Variant/Array
。不能传递给InStr
。
使用For Each RowCell In HelpTable.Rows(helpRow).Cells
遍历行单元格