VBA运行时错误13类型不匹配#VALUE

时间:2016-06-20 14:45:48

标签: vba

在我的某些列的单元格中,出现#VALUE!个单词,其中的公式如下所示:

=IF(VALUE(RIGHT(CELL("nome.arquivo";A1);LEN(CELL("nome.arquivo";A1))-SEARCH("]";CELL("nome.arquivo";A1))))=1;1;1+INDIRECT(ADDRESS(329;COLUMN();;;VALUE(RIGHT(CELL("nome.arquivo";A1);LEN(CELL("nome.arquivo";A1))-SEARCH("]";CELL("nome.arquivo";A1))))-1)))

提到的专栏是CT。现在,当我第一次出现#VALUE时,我试图遍历细胞!我收到一个错误:

Run Time Error 13, Type mismatch在这一行:

 L = 9
         Do While Cells(L, "CT").Value <> ""         '<========= HERE AN ERROR
            L = L + 8
         Loop

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

Cells不接受任何String参数,您获得的类型不匹配错误与#VALUE /正在处理的数据无关 - 因为代码永远不会评估数据,因为Cells需要两个Integer参数: dang每次都咬我 - 显然你可以在{{1}中使用字符串参数功能。啊。

所以问题在于将值与Cells - 一个字符串进行比较。 ""不是有效的字符串函数,因此您需要考虑它:

#VALUE!

您可能还需要正确限定该函数调用:

Dim theCell As Range
Set theCell = Cells(L, "CT")
If Not IsError(theCell.Value) Then
    Do While Not IsEmpty(theCell.Value)
        '...
        L = L + 8
    Loop
End If

这就是显式您正在查看活动工作表中的单元格 ;一个不合格的调用是隐式这样做,任何隐含的东西都可能容易混淆和容易出错。

确保模块顶部显示Do While Not IsEmpty(ActiveSheet.Cells(L, "CT").Value) Option Explicit已正确声明:

L

“L”是一个无意义的标识符,你应该考虑在你使用它之后命名它:

Dim L As Long

这样,您的代码就变得更容易阅读,遵循和理解。