【发布时间】:2020-09-21 14:29:44
【问题描述】:
我想做什么
我有一个函数可以遍历单元格以查看它们是否有#N/A 错误。如果是这样,另一列中同一行中的单元格应为绿色。
问题
我收到错误Run-time error 13: Type Mismatch。一旦到达某些包含文本的单元格,就会发生这种情况。到目前为止,我发现它似乎只对超过 256 个字符的单元格抛出此错误。
我使用 Excel 作为 64 位 Office 365 订阅的一部分。
到目前为止我尝试了什么
我尝试使用On Error GoTo [ErrorLabel] 忽略此错误,然后继续进行下一次迭代。由于某种原因,这只能工作一次。一旦检查了另一个超过 256 个字符的单元格,我就会再次收到相同的错误。
编辑:也许它与函数 IsNA() 期望 Variant 数据类型有关。我想,由于单元格值太大而不能作为字符串,所以它根本没有存储在变量中,或者它只是与Variant不同的东西。
这是一个包含多个程序的更大模块的一部分。所以它应该是程序化的。 cmets 中提出的isError 和CVErr 并未解决此问题。仍然收到Type Mismatch。
代码
产生错误的初始代码:
For i = 2 To rowCount
If WorksheetFunction.IsNA(Cells(i, 4)) _
Then Cells(i, 1).Interior.Color = RGB(0, 255, 0)
我尝试解决此问题的代码。这仍然会引发错误(请参阅“到目前为止我尝试了什么”部分):
For i = 2 To rowCount
On Error GoTo Error
'based on following condition
' 1. Name does not exist in previous weeks' sheet, identified by VLOOKUP being #N/A
If WorksheetFunction.IsNA(Cells(i, 4)) _
Then Cells(i, 1).Interior.Color = RGB(0, 255, 0)
Error:
Next i
如何复制
创建一个空白表,其中一列包含几行不同长度的文本。如下图,至少有一行超过 256 个字符才能测试。
在 Sheet1 下的 VBA 中插入以下代码:
Sub isText()
Dim i As Integer
For i = 2 To 6
If WorksheetFunction.isText(Cells(i, 1)) _
Then Debug.Print "Is Text" _
Else Debug.Print "Is Not A Text"
Next i
End Sub
在这个例子中,错误一到达第 6 行就会抛出。
【问题讨论】:
-
使用
If IsError(Cells(i, 4)) -
您可以对这个 btw 使用条件格式并完全避免使用 VBA。
-
如前所述,除非它作为更大过程的一部分存在,否则条件格式将是更好的选择。它将自动更新,无需重新运行子程序。
-
按照@ScottCraner 的建议使用
IsError或使用CVErr。这两种方法都显示HERE -
@Fortun 请尝试
If WorksheetFunction.isText(Cells(i, 1).Value2) Then- 它适用于您的“如何重现”中的代码和数据(但使用.isText(Cells(i, 1))我也会出错)