在我的某些列的单元格中,出现#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
如何解决这个问题?
答案 0 :(得分:1)
dang每次都咬我 - 显然你可以在{{1}中使用字符串参数功能。啊。Cells
不接受任何String
参数,您获得的类型不匹配错误与#VALUE
/正在处理的数据无关 - 因为代码永远不会评估数据,因为Cells
需要两个Integer
参数:
所以问题在于将值与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
这样,您的代码就变得更容易阅读,遵循和理解。