Excel 运行时错误13-for循环中if函数的类型不匹配(尝试将错误与字符串匹配)
我试图在特定列中找到第一个表示“#N/A”的单元格(行)。我无法解决我遇到的类型不匹配错误。我在谷歌上搜索并阅读了很多类似的stackflow问题和答案,但仍然无法解决它 到目前为止,我尝试过的主要事情(除了各种小变化):Excel 运行时错误13-for循环中if函数的类型不匹配(尝试将错误与字符串匹配),excel,vba,Excel,Vba,我试图在特定列中找到第一个表示“#N/A”的单元格(行)。我无法解决我遇到的类型不匹配错误。我在谷歌上搜索并阅读了很多类似的stackflow问题和答案,但仍然无法解决它 到目前为止,我尝试过的主要事情(除了各种小变化): 使用即时窗口和调试打印检查输出(GetDates子项工作正常) 将集合转换为可以定义数据类型的数组 使用while函数而不是for(在本例中,我让它尝试使用while函数,但在最后一次迭代中,我再次得到类型不匹配) 以下是完整的代码: Dim EndofWeekDates
- 使用即时窗口和调试打印检查输出(GetDates子项工作正常)
- 将集合转换为可以定义数据类型的数组
- 使用while函数而不是for(在本例中,我让它尝试使用while函数,但在最后一次迭代中,我再次得到类型不匹配)
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
当v变化时,在每次15-lRow运行期间,EndofWeekDates(x)应保持恒定。我试着将变量I(前面使用过)替换为v,它可以工作,但前提是I保持不变并且在for循环中没有改变。就我所知,问题在于v,而不是EndofWeekDates(x)。此外,似乎只有当我在每次迭代中不使用常量而是使用一个不断变化的数字时,问题才会出现。我尝试使用与GetDates中相同的while函数,但也没有解决这个问题
由于v被声明为Long,并且我也尝试了integer,所以我被卡住了。尤其是因为早期使用的单元格。Value与Long一起工作,而Long在每次迭代中都会增加。这是一个非常特殊的错误。我不确定是什么原因导致它,但使用
Cells()。文本
而不是Cells()。值
将正常工作
这是一个非常奇怪的错误。我不确定是什么原因导致它,但使用
Cells()。文本
而不是Cells()。值
将正常工作
试试下面的方法
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
试试下面
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
你的线路
If Cells(v, EndofWeekDates(x)).Value = "#N/A" Then
正在崩溃,因为单元格不包含字符串“#N/A”
,而是包含错误代码,Excel显示为#N/A
无法将错误代码与字符串进行比较,因为不存在允许将比较的两侧转换为公共数据类型的类型转换,因此会生成“类型不匹配”错误
测试#N/A
错误状况的正确方法是
If Application.IsNA(Cells(v, EndofWeekDates(x))) Then
你的线路
If Cells(v, EndofWeekDates(x)).Value = "#N/A" Then
正在崩溃,因为单元格不包含字符串“#N/A”
,而是包含错误代码,Excel显示为#N/A
无法将错误代码与字符串进行比较,因为不存在允许将比较的两侧转换为公共数据类型的类型转换,因此会生成“类型不匹配”错误
测试#N/A
错误状况的正确方法是
If Application.IsNA(Cells(v, EndofWeekDates(x))) Then
或者如果单元格(v,EndofWeekDates(x)).Value=CVErr(xlErrNA),那么
@TimWilliams-根据CVErr检查(有效的)值
与根据字符串检查错误代码
具有相同的问题-没有允许进行检查的类型转换,因此您会得到“类型不匹配”错误。或如果单元格(v,EndofWeekDates(x)).Value=CVErr(xlErrNA),则
@TimWilliams-根据CVErr检查(有效的)值
与根据字符串检查错误代码具有相同的问题-没有允许进行检查的类型转换,因此您会得到“类型不匹配”错误。