根据每行多个单元格的值搜索表格

时间:2017-10-17 14:48:57

标签: excel vba excel-vba for-loop range

我试图找到输入表格的单位的先前值(单位的数据是整行)。随着时间的推移,单元中某列中的值会增长,并且我尝试使用循环根据每行中的两个值分析每一行,并在为该特定行输入新值时返回该特定单元中的先前值单元。

'My Variables

    Dim current_size As Integer
    Dim last_size As String
    Dim joint_number As Integer

    Dim tool_sizes As Range: Set tool_sizes = drill_log.Range("Drill_Log[Tool Size]")
    Dim joints As Range: Set joints = drill_log.Range("Drill_Log[Joint '#]")
    Dim pass_types As Range: Set pass_types = drill_log.Range("Drill_Log[Pass Type]")
    Dim row As Range

    'Finds the current pass size and last pass size and assigns it to the current pass size variables
        If pass_type = ream Then
            current_size = drill_log.Range("W" & last_ream_range.row)
            joint_number = drill_log.Range("C" & last_ream_range.row)

        ElseIf pass_type = intersect_ream Then
            current_size = drill_log.Range("W" & last_intersect_ream_range.row)
            joint_number = drill_log.Range("C" & last_intersect_ream_range.row)
        Else
            Exit Sub
        End If

    'Finds the previous pass size for the last joint entered

        For Each row In drill_log.Range("Drill_Log")

'Line that Errors
          If pass_types.Value = pass_type And joints.Value = joint_number Then
          If tool_sizes < current_size Then
                    last_size = tool_sizes
                Else
                    last_size = "NONE"
                End If
            Else
            End If

        Next row

我的目标是让它检查每一行中的指定列,如果它匹配,那么如果包含信息的列中的单元格小于当前列,则将其分配给变量。

现在它告诉我,我的类型不匹配,我无法解决它。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

Range.Value与字符串或数字或任何内容进行比较的指令上的类型不匹配错误,几乎可以肯定是由于Range.Value包含错误值。

修复数据并确保这些单元格中永远不会出现错误:

=IFERROR([whatever formula you have here], "")

或者更改代码,使其不再假设单元格中没有错误:

If Not IsError(pass_types.Value) And Not IsError(joints.Value) Then
    If pass_types.Value = pass_type And joints.Value = joint_number Then
        '...
    End If
End If

...或安全玩耍,尽可能做到。

类型不匹配的原因是当IsError(Range.Value)True时,Range.Value的类型为Variant/Error,而VBA不会我不知道如何将Error值与任何值进行比较。

摄制:

Debug.Print TypeName(CVErr(xlErrNA))       'prints "Error"
Debug.Print IsError(CVErr(xlErrNA))        'prints "True"
Debug.Print CVErr(xlErrNA)) = vbNullString 'type mismatch
Debug.Print CVErr(xlErrNA)) = 0            'type mismatch