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, nStart
wird der Standardwert beibehalten 0
. Dies führt zu einem Fehler in dieser Zeile.
If Range("a" & nRow).Value <> "CPNEC" Then
because A0
ist kein gültiger Bereichsverweis. Um dieses Problem zu umgehen (und sich unnötige Schleifen zu ersparen), fügen Sie nStart = 0
nach 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.