我正在尝试找到第一个单元格(行)说明" #N / A"在特定列中。我无法解决我得到的类型不匹配错误。我用Google搜索并阅读了很多类似的stackflow问题和答案,但仍然无法解决它。
到目前为止我尝试过的主要内容(除了各种小变化):
这是完整的代码:
Dim EndofWeekDates As New Collection
Dim EndofRange As New Collection
Dim lCol As Long
Dim lRow As Long
Dim i As Long
Dim j As Long
Dim v As Long
Dim x As Long
Sub GetDates()
Set EndofWeekDates = Nothing
i = 4
j = 1
lCol = Cells(1, Columns.Count).End(xlToLeft).Column
While j < lCol + 1
If Not IsEmpty(Cells(i, j).Value) And Not Cells(i, j).Value = "End" Then
EndofWeekDates.Add j
End If
j = j + 1
Wend
Call GetRange
End Sub
Sub GetRange()
Set EndofRange = Nothing
For x = EndofWeekDates.Count To 1 Step -1
lRow = Cells(Rows.Count, EndofWeekDates(x)).End(xlUp).Row
For v = 15 To lRow
If Cells(v, EndofWeekDates(x)).Value = "#N/A" Then
EndofRange.Add v
Exit For
End If
Next v
Next x
End Sub
我在IF行的下一节中得到错误
For v = 15 To lRow
If Cells(v, EndofWeekDates(x)).Value = "#N/A" Then
EndofRange.Add v
Exit For
End If
Next v
当 v 更改时, EndofWeekDates(x)应在每次 15 - lRow 运行期间保持不变。我已经尝试输入变量 i (之前使用过)而不是 v 并且只有在 i 保持不变且未在 for loop 。据我所知,问题在于 v 而不是 EndofWeekDates(x)。此外,似乎问题只发生在我不使用常量而是每次迭代更改数字时。我尝试使用与 GetDates 中相同的功能,但这也没有解决它。
由于 v 被声明为 Long 而且我也尝试了整数,我被卡住了。特别是因为之前使用的 Cells.Value 与 Long 一起工作,每次迭代都会增加 Long 。
答案 0 :(得分:3)
你的行
If Cells(v, EndofWeekDates(x)).Value = "#N/A" Then
崩溃,因为单元格不包含字符串"#N/A"
,而是包含错误代码,Excel显示为#N/A
。
无法执行错误代码与字符串的比较,因为没有类型转换允许将比较的两面转换为通用数据类型 - 因此它会生成&#34;类型不匹配&#34 ;错误。
测试#N/A
错误情况的正确方法是
If Application.IsNA(Cells(v, EndofWeekDates(x))) Then
答案 1 :(得分:0)
答案 2 :(得分:0)
尝试以下
For v = 15 To lRow
If Cells(v, EndofWeekDates(x)).Text = "#N/A" Then
EndofRange.Add v
Exit For
End If
Next v
或者,
For v = 15 To lRow
If Application.WorksheetFunction.IsNA(Cells(v, EndofWeekDates(x))) Then
EndofRange.Add v
Exit For
End If
Next v