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

VBA运行时错误13类型不匹配#值,vba,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))-SEAR

在我的专栏的一些单元格中,出现了
#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!我得到一个错误:

运行时错误13,此行的类型不匹配

 L = 9
         Do While Cells(L, "CT").Value <> ""         '<========= HERE AN ERROR
            L = L + 8
         Loop
L=9
Do While Cells(L,“CT”).Value”“
Cells
不接受任何
字符串
参数,您得到的类型不匹配错误与正在处理的数据无关-因为代码永远无法计算数据,由于
单元格
需要两个
整数
参数:dang每次都会咬我-显然,您可以在
单元格
函数中使用字符串参数。啊

因此,问题在于将值与字符串进行比较<代码>#值
不是有效的字符串函数,因此需要对其进行说明:

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)
这样,您就可以清楚地看到活动工作表中的单元格;一个非限定的调用隐式地这样做,任何隐式的调用都可能会造成混乱和bug

确保模块顶部显示了
选项Explicit
,并且正确声明了
L

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

Dim currentRow As Long
currentRow = 9

Do While Not IsEmpty(ActiveSheet.Cells(currentRow, "CT"))

这样,您的代码就更容易阅读、理解和理解。

单元格
接受两个
变量
参数,第二个参数可以是字符串(A1
符号中的列字母)<代码>单元格(L,“CT”)< /代码>是一个有效的调用。@ GSerg,我知道,我正处于编辑的中间。每次都咬我。天哪,这太难看了。我测试了你所有的代码,但没有工作——还有类型不匹配错误。我发现了这样一种看起来很好用的方法:在空闲时执行(Cells(L,“CT”).Value)。您对我的方法有何看法?@JimmyJimm
do While IsEmpty
与您的原始代码实际测试的完全相反。在
While
IsEmpty
之间粘贴一个
Not
。当你需要使用该值做某事时,它也会咬你一口。最好的方法是使用
iError
验证该值是否表示错误值,然后对其进行处理。