类型不匹配错误#13

时间:2014-11-08 20:50:07

标签: excel excel-vba for-loop vba

我有一个迭代遍历每一行的For循环,我需要从D列中提取每一行的值以在循环中使用。

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

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

我一直遇到Type mismatch error #13

2 个答案:

答案 0 :(得分:2)

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

A您已将X定义为特定数据类型,但为其指定了不同的类型。例如。您已将X定义为Long,但该单元格包含String。假设您的单元格为A1,且excelSUSub 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.

我建议查看我给他的全功能代码示例。

即因为:

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

  2. 您的代码不会说话。如果用适当命名的变量替换硬编码值,它们将会。

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