Fehler, wenn Wert nicht vorhanden ist

Fehler, wenn Wert nicht vorhanden ist

Ich verwende den unten stehenden Code mehrmals in einem Sub für verschiedene Werte, nicht nur für „CPNEC“. Er funktioniert einwandfrei, wenn es in der Tabelle einen Bereich mit diesem Wert gibt, aber wenn er darüber fällt, existiert der Wert nicht. Dies ist eine Routine, die ich jeden Monat verwenden möchte, da meine Daten manchmal keinen bestimmten Wert enthalten und ich daher zum nächsten Wert wechseln kann, ohne darüber zu fallen. Kann mir bitte jemand helfen?

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

Antwort1

Wenn kein passender Wert vorhanden ist, nStartwird der Standardwert beibehalten 0. Dies führt zu einem Fehler in dieser Zeile.

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

because A0ist kein gültiger Bereichsverweis. Um dieses Problem zu umgehen (und sich unnötige Schleifen zu ersparen), fügen Sie nStart = 0nach der ersten Schleife eine bedingte Prüfung für hinzu. Wenn sie Null ergibt, beenden Sie das Subprogramm, andernfalls fahren Sie fort. Dadurch sollten Fehler vermieden werden, die Ihren Code stoppen, wenn keine Übereinstimmung gefunden wird.

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

Antwort2

Excelll erklärt es. Aber da Sie gut mit For-Schleifen umgehen können, können Sie auch in jeder Zelle nach der Zeichenfolge suchen und, wenn das Makro sie findet, die gesamte Zeile in das richtige Arbeitsblatt kopieren. Sie erhalten keine Fehlermeldung, wenn der Wert nicht vorhanden ist.

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

In Zelle „A1“ und Zelle „A2“ sollten Informationen stehen, z. B. die Spaltentitel. .End(xlDown)Außerdem .Offset(1,0)wird die erste leere Zeile gesucht, in die die Informationen eingefügt werden können.

verwandte Informationen