Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 运行时错误13-for循环中if函数的类型不匹配(尝试将错误与字符串匹配)_Excel_Vba - Fatal编程技术网

Excel 运行时错误13-for循环中if函数的类型不匹配(尝试将错误与字符串匹配)

Excel 运行时错误13-for循环中if函数的类型不匹配(尝试将错误与字符串匹配),excel,vba,Excel,Vba,我试图在特定列中找到第一个表示“#N/A”的单元格(行)。我无法解决我遇到的类型不匹配错误。我在谷歌上搜索并阅读了很多类似的stackflow问题和答案,但仍然无法解决它 到目前为止,我尝试过的主要事情(除了各种小变化): 使用即时窗口和调试打印检查输出(GetDates子项工作正常) 将集合转换为可以定义数据类型的数组 使用while函数而不是for(在本例中,我让它尝试使用while函数,但在最后一次迭代中,我再次得到类型不匹配) 以下是完整的代码: Dim EndofWeekDates

我试图在特定列中找到第一个表示“#N/A”的单元格(行)。我无法解决我遇到的类型不匹配错误。我在谷歌上搜索并阅读了很多类似的stackflow问题和答案,但仍然无法解决它

到目前为止,我尝试过的主要事情(除了各种小变化):

  • 使用即时窗口和调试打印检查输出(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检查(有效的)
与根据
字符串检查错误代码具有相同的问题-没有允许进行检查的类型转换,因此您会得到“类型不匹配”错误。