我试图在带有ListObjects的工作表中运行带有IF AND THEN语句的宏。
在工作表“CommissionVoice”中,宏必须检查列“L”是否包含文本值“No Pay”或“Below Target”。如果它包含这些字符串,则列K(整数)需要与列E(百分比)一起计算。
到目前为止,我只能用一个简单的IF语句创建下一个(测试)代码,但这并不起作用:
Sub Test()
Dim tbl As ListObject
Dim rng As Range
Dim cel As Range
Set tbl = ActiveSheet.ListObjects("CommissionVoice")
Set rng = tbl.ListColumns(12).DataBodyRange
For Each cel In rng
If InStr(1, cel.Value, "No pay") > 0 Then
cel.Offset(0, -1).Value = "OK"
End If
Next cel
End Sub
有人能帮我吗?
2条答案
按热度按时间czq61nw11#
类型不匹配错误可能有不同的原因,例如,您无法将字符串赋给数字或将数字赋给对象。通常,使用调试器很容易找到此错误。请检查引发错误的语句的所有相关值/变量。
在这个特定的例子中,命令
InStr(1, cel.Value, "No pay")
引发了错误。唯一可能是错误类型的值是cel.Value
,它表示实际单元格的值。现在,单元格只能包含数值、字符串值、布尔值或错误。错误不是字符串,它们是一种单独的数据类型。当您看到#N/A
时,这不是字符串"#N/A"
。这些错误值不能用作任何其他数据类型,也不能转换为任何其他数据类型,因此会出现类型不匹配错误。您可以使用函数
IsError
检查VBA中的错误。因此,您可以认为该语句只需更改为但是,这并不能解决问题- VBA将始终检查条件的所有部分,因此无论如何都会执行
InStr
-命令。2次尝试(还有其他)
但正如评论中已经指出的,很可能用公式来解决这个问题会更好。
yiytaume2#
在Excel表格中(
ListObject
)