单元格不为null但显示为null

时间:2015-02-04 08:51:48

标签: excel vba

我有一些代码,我从网上采取它,它的工作原理。但是,当我试图增加范围时,存在一些问题

此代码有效

Sub Test1()
    Dim strString$, x&
    strString = Range("B1").Value

    With Range("A1")
        .Font.ColorIndex = 1
        For x = 1 To Len(.Text) - Len(strString) Step 1
            If Mid(.Text, x, Len(strString)) = strString Then .Characters(x, Len(strString)).Font.ColorIndex = 5
        Next x
    End With
End Sub

这不是

Sub Test1()
    Dim strString$, x&
    strString = Range("B1").Value

    **With Range("A1:A2")**
        .Font.ColorIndex = 1
        **For x = 1 To Len(.Text) - Len(strString) Step 1**
            If Mid(.Text, x, Len(strString)) = strString Then .Characters(x, Len(strString)).Font.ColorIndex = 5
        Next x
    End With
End Sub

我确信我的单元格A1和A2不为空。但是,当我在调试模式下运行它时,它显示Len(.Text)为空。但是,当我试图以这种方式做它时,它可以工作

这也有效

Sub Test1()
    Dim strString$, x&
    strString = Range("B1").Value

    With Range("A2")
        .Font.ColorIndex = 1
        For x = 1 To Len(.Text) - Len(strString) Step 1
            If Mid(.Text, x, Len(strString)) = strString Then .Characters(x, Len(strString)).Font.ColorIndex = 5
        Next x
    End With
End Sub

基于调试器,错误在于此代码

Len(.Text) which is null

2 个答案:

答案 0 :(得分:1)

这是因为您无法在包含多个单元格的范围内调用.Text。您需要首先遍历范围单元格,以便一次继续处理它们。

答案 1 :(得分:1)

您需要为该范围内的所有单元格创建循环,因此代码应如下所示:

Sub Test1()
Dim rng As Range
Dim strString$, x&
strString = Range("B1").Value
For Each rng In Range("A2:A3")
    rng.Font.ColorIndex = 1
    For x = 1 To Len(rng.Text) - Len(strString) Step 1
       If Mid(rng.Text, x, Len(strString)) = strString Then rng.Characters(x, Len(strString)).Font.ColorIndex = 5
    Next x
Next rng

End Sub