"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
첫 번째 루프 이후에 조건부 검사를 추가하세요. 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
Excelllll이 설명합니다. 그러나 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)