我发现了一个我无法理解的异常。我使用 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. ?