types不匹配错误#13

我有一个For循环遍历每一行,我需要从循环中使用的每一行的D列拉的值。

我正在尝试使用以下方法通过使用计数器的值作为行号来提取值。

X = Worksheets("Test").Cells(4, Counter).Value 

我一直遇到Type mismatch error #13

这些是我可以想到的两种情况,当你会得到这个错误

A您已经将X定义为特定的数据types,但将其指定为不同的types。 例如。 您已将X定义为Long但单元格包含一个String 。 假设你的单元格是A1 ,它具有excelSU 。 要复制错误,请参阅此示例

 Sub Sample() Dim x As Long x = ThisWorkbook.Sheets("Sheet1").Range("A1").Value End Sub 

同样,你可以声明一个特定types的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不是作为一个Row而是作为Column 。 语法是Cells(Row,Column)

您可能会将string拖入整数数组或类似的东西。

至于你的for循环: 我刚刚回答某个人的问题有点类似的问题。

我build议通过我给他的全function代码示例。

即因为:

  1. 您正在使用硬编码值(4rth列)。 您最终会遇到维护问题。 添加一列的用户很容易搞砸你的代码。

  2. 你的代码不会为自己说话。 如果你用正确命名的variablesreplace你的硬编码值,他们会。

注:由于交叉点的数量,这可能会在处理器上消耗更多。 如果您想出超过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