Chrw() 异常:不可见值

Chrw() 异常:不可见值

我发现了一个我无法理解的异常。我使用 Chrw() 函数生成了一个特殊字符列表(放入一列单元格中),并且该列表创建得很好。但是,有些单元格似乎是空的,没有文本、数字、字符或空格。我想删除有空格的行,所以我运行了一些代码来删除该特定列中不包含任何内容的 EntireRows。但没有删除任何行。空白单元格仍然存在,这不是因为我的删除代码有任何问题。即使单元格是空白的,即使检查单元格内容栏中没有空格或字符,它们也不会被删除,除非我先物理单击单元格并按下“删除”键。所以我发现 Chrw() 函数一定产生了一些不可见的值,而这些值并没有在单元格或单元格内容栏中实际显示。这种异常的一个例子是 Chrw(877)

或者,一些显示为空白的单元格不会在单元格中显示字符,直到您单击单元格内容栏。然后单元格中会出现一个字符。例如,Chrw(860) 和 Chrw(866)。此外,即使字符显示在内容栏中,您也无法复制它,甚至无法使用栏中的箭头键移动光标。

最后,我测试了几个不同的这些不可见值,看看它们是否匹配。结果发现它们不匹配。至少在我比较的两个值上它们不匹配。我没有比较其余的值。

发生了什么?我们可以在代码中使用这些不可见的值吗?

以下是生成 H 列列表的代码:

Sub Create_Special_Character_List()

    Dim rowCounter As Long

    rowCounter = 1

        For i = 0 To 65535
            Sheet1.Range("H" & rowCounter) = ChrW(i)
            Sheet1.Range("I" & rowCounter) = i
            rowCounter = rowCounter + 1
        Next i

    End Sub

这是我的删除代码:

Sub getRidOfBlanks()

    For i = 65536 To 1 Step -1
        If IsEmpty(Sheet1.Range("H" & i)) Or Sheet1.Range("H" & i) = "" Or Sheet1.Range("H" & i) = " " Or Sheet1.Range("H" & i) = "  " Or Sheet1.Range("H" & i) = "   " Then
           Sheet1.Rows(i & ":" & i).EntireRow.Delete
        End If
    Next i

End Sub

以下是比较部分:

Sub Compare_Values_Of_2_Different_Cells()

    If Sheet1.Range("H853") = Sheet1.Range("H854") Then
    '   Actually Chrw(855) and Chrw(856)
        Debug.Print "Values Match"
    Else
        Debug.Print "Values Don't Match"
    End If

    Debug.Print "1.  " & Sheet1.Range("H853") '  Chrw(855)
    Debug.Print "2.  " & Sheet1.Range("H853") '  Chrw(856)

End Sub

'  Debug.Print Results:
'
'  Values Don't Match
'  1. ?
'  2. ?

答案1

仅仅因为您无法“看到”它们并不意味着这些字符不存在或不能用作单元格中的实际数据。

它们是 Unicode 字符。具体来说,正如 Ramhound 提到的,组合变音符号。 他们是故意的与其他“正常”字符一起使用,而不是单独使用,但这并不意味着它们不能出现在文本中。如何呈现则取决于应用程序,在这种情况下,由于缺少要修改的字符,因此根本就不会呈现它们。

855 是结合上方的右半环
856 是结合上面的操作

因此,您的单元格根本不包含“空白”,它们包含的只是无法呈现或不会出现在当前字体中的字符。

他们也不被看作是同一个人,因为他们根本不是同一个人。他们绝对是不同的人物。

相关内容