值不存在时出错

值不存在时出错

我在一个子程序中多次使用下面的代码来获取不同的值,而不仅仅是“CPNEC”。当电子表格中存在包含该值的范围时,它工作正常,但超出该范围则表示不存在该值。这是我每个月都想使用的例程,有时我的数据中没有某个值,所以我需要它能够移动到下一个值而不会超出范围。有人能帮帮我吗?

Sub SelectCPNEC()
    ' Figure out where the "CPNEC" data starts.
    For nRow = 1 To 65536
    If Range("A" & nRow).Value = "CPNEC" Then
    nStart = nRow
    Exit For
    End If
    Next nRow

    ' Figure out where the "CPNEC" data ends.
    For nRow = nStart To 65536
    If Range("a" & nRow).Value <> "CPNEC" Then
    nEnd = nRow
    Exit For
    End If
    Next nRow
    nEnd = nEnd - 1

    'Select the range required

    Range("A" & nStart & ":G" & nEnd).Select

    'Now copy and paste into the right worksheet

    Selection.Copy
    Application.Goto ActiveWorkbook.Sheets("CPNEC").Cells(1, 1)
    ActiveSheet.Paste

End Sub

答案1

当不存在匹配值时,nStart保留默认值0。这会导致此行出现错误。

If Range("a" & nRow).Value <> "CPNEC" Then

因为A0不是有效的范围引用。为了解决这个问题(并为自己省去一些不必要的循环),请nStart = 0在第一个循环后添加条件检查。如果它为零,则退出子程序;否则,继续。这应该可以避免在未找到匹配项时出现错误而停止您的代码。

Sub SelectCPNEC()
    ' Figure out where the "CPNEC" data starts.
    For nRow = 1 To 65536
    If Range("A" & nRow).Value = "CPNEC" Then
    nStart = nRow
    Exit For
    End If
    Next nRow

    If nStart > 0 Then
        ' Figure out where the "CPNEC" data ends.
        For nRow = nStart To 65536
        If Range("A" & nRow).Value <> "CPNEC" Then
        nEnd = nRow
        Exit For
        End If
        Next nRow
        nEnd = nEnd - 1

        'Select the range required

        Range("A" & nStart & ":G" & nEnd).Select

        'Now copy and paste into the right worksheet

        Selection.Copy
        Application.Goto ActiveWorkbook.Sheets("CPNEC").Cells(1, 1)
        ActiveSheet.Paste
    End If
End Sub

答案2

Excellll 对此进行了解释。但由于您能很好地处理 for 循环,因此您也可以在每个单元格上搜索字符串,如果宏找到它,则将整行复制到正确的工作表。如果该值不存在,则不会出现错误。

For Each cell In Range("A1: A65536")
    If cell.Value = "CPNEC" Then
        cell.EntireRow.Copy Workbooks.Open("otherWorkbook.xls").Sheets("Sheet1").Range("A1").End(xlDown).Offset(1, 0)
    End If
Next cell

单元格“A1”和单元格“A2”中应该有一些信息,例如列标题。.End(xlDown)并将.Offset(1,0)找到第一个空行来粘贴信息。

相关内容