“如果不是instr”不起作用,我认为应该在vba中

Ski*_*ck3 5 excel vba excel-vba

我有一张包含合同清单的工作表,其中一列是供应商名称,一列是截止日期,除非合同是来自特定的供应商,否则我想将所有经过的日期设为红色。我以前曾经InStr检查过一个单元格内是否有一个字符串,所以由于我刚从vba开始,所以我想在循环中插入以下内容

If Not InStr(LCase(Data.Cells(i, 4).Value), "flowserve") Then
    If CDate(Data.Cells(i, "h").Value) < Date Then _
        Data.Cells(i, "h").Font.Color = -16776961
End If
Run Code Online (Sandbox Code Playgroud)

期望它将为供应商名称中没有“ flowserve”的合同的通过日期着色。但是相反,它似乎只是给所有通过的日期加上颜色,好像在InStr任何地方都找不到。

然后我尝试做

If InStr(LCase(Data.Cells(i, 4).Value), "flowserve") Then
    'do nothing
Else
    If CDate(Data.Cells(i, "h").Value) < Date Then _
        Data.Cells(i, "h").Font.Color = -16776961
End If
Run Code Online (Sandbox Code Playgroud)

而且它可以按我的意愿工作,所以我猜测Not不能按照我的想法工作。

现在,即使我有一个解决方案,我也希望有人可以解释第一个代码中出了什么问题。希望我足够清楚。

预先感谢大家!

Ste*_*ven 8

https://msdn.microsoft.com/zh-CN/library/8460tsh1%28v=vs.90%29.aspx

InStr返回的值不是布尔值,请尝试将其与返回的值进行比较。

If InStr(LCase(Data.Cells(i, 4).Value), "flowserve") = 0 Then
    If CDate(Data.Cells(i, "h").Value) < Date Then _
        Data.Cells(i, "h").Font.Color = -16776961
End If
Run Code Online (Sandbox Code Playgroud)