我在一个子程序中多次使用下面的代码来获取不同的值,而不仅仅是“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)
找到第一个空行来粘贴信息。