我有一个迭代遍历每一行的For循环,我需要从D列中提取每一行的值以在循环中使用。
我试图使用以下方法通过使用计数器的值作为行号来提取值。
X = Worksheets("Test").Cells(4, Counter).Value
我一直遇到Type mismatch error #13
答案 0 :(得分:2)
这些是我可以想到的两种情况,当你得到那个错误时
A
您已将X
定义为特定数据类型,但为其指定了不同的类型。例如。您已将X
定义为Long
,但该单元格包含String
。假设您的单元格为A1
,且excelSU
为Sub Sample()
Dim x As Long
x = ThisWorkbook.Sheets("Sheet1").Range("A1").Value
End Sub
。要复制错误,请参阅此示例
Counter
同样,您可以声明特定类型的Sub Sample()
Dim counter As Excel.Application
For counter = 1 To 20
x = ThisWorkbook.Sheets("Sheet1").Range("A" & counter).Value
Next
End Sub
,但使用不同的类型。例如
B
A1
让我们再举一个单元格#N/A
的例子。您的单元格有一个公式错误,如#DIV/0!
或Type Mismatch Error
或其他一些错误。要复制错误,请使用与上面相同的代码,您将获得Counter
修改强>
使用计数器的值作为行号
BTW,Row
未用作Column
,而是用作Cells(Row,Column)
。语法为{{1}}
答案 1 :(得分:0)
您可能会将字符串拉入整数数组或类似的东西。
至于你的for-loop: I just answered someone's question on a somewhat similar problems.
我建议查看我给他的全功能代码示例。
即因为:
您使用的是硬编码值(4rth列)。您最终会遇到维护问题。添加列的用户很容易搞砸您的代码。
您的代码不会说话。如果用适当命名的变量替换硬编码值,它们将会。
注意:由于交叉点的数量,这可能会在处理器上消耗更多。如果您想出的表格超过10,000行,您可以随时调整策略。
检查链接并回答,但同时这里是我使用Tables / ListObjects的简短版本:
dim listO as ListObject
set listO = Worksheets("Test").ListObjects(1)
dim listC as ListColumn
set listC = ListO.ListColumns("ColumnTitle")
dim listR as ListRow
dim anArrayX() as Variant
ReDim anArrayX (1 to listO.ListRows.Count)
dim intersectedRange as Range
for i = 1 to listO.ListRows.count
set rowRange = ListO.ListRows(i).Range
set intersectedRange = Application.Intersect(rowRange, listC.Range)
anArrayX(i) = intersectedRange.Value
Debug.Print anArrayX(i)
next i