On Error GoTo skip2 Cells.Find(What:="期货持仓汇总", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, SearchFormat:=False).Activate If Not ActiveCell Is Nothing Then ActiveCell.Activate i = Selection.Row + 2 i0 = i Do While Range("A" & i) <> "合计" i = i + 1 Loop i = i - 1 Range("A" & i0, "J" & i).Copy Workbooks("场内部期权每日结算.xlsm").Activate Sheets("当日持仓").Select Range("I2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End If '贴期权持仓 skip2: Workbooks("011381506002_" & CStr(Format(now, "yyyy-mm-dd")) & ".xls").Activate 为什么这段代码中on error goto skip2失效
时间: 2024-02-14 14:31:23 浏览: 257
在你提供的代码中,`On Error GoTo skip2` 失效的原因可能是因为 `Find` 方法引发了一个无法处理的错误。当 `Find` 方法找不到指定的值时,它会引发一个运行时错误,并且会中断代码的执行,导致 `On Error` 语句不再生效。
为了避免这种情况,你可以使用 `Application.Match` 函数来替代 `Cells.Find` 方法。`Match` 函数在找不到指定的值时会返回错误值而不是引发错误,因此可以通过检查返回值来判断是否找到了目标值。
以下是一个修改后的示例代码:
```vb
On Error Resume Next
Dim targetCell As Range
Set targetCell = Cells.Find(What:="期货持仓汇总", LookIn:=xlFormulas, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _
SearchFormat:=False)
On Error GoTo 0 ' 重新启用错误处理
If Not targetCell Is Nothing Then
targetCell.Activate
i = targetCell.Row + 2
i0 = i
Do While Range("A" & i) <> "合计"
i = i + 1
Loop
i = i - 1
Range("A" & i0, "J" & i).Copy
Workbooks("场内部期权每日结算.xlsm").Activate
Sheets("当日持仓").Select
Range("I2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End If
' 贴期权持仓
Workbooks("011381506002_" & CStr(Format(Now, "yyyy-mm-dd")) & ".xls").Activate
```
在上面的代码中,我们使用 `Set targetCell = Cells.Find(...)` 语句来查找目标单元格,并将其赋值给 `targetCell` 变量。然后,我们通过检查 `targetCell` 是否为 `Nothing` 来判断是否找到了目标值。这样可以避免 `Find` 方法引发的错误,从而使 `On Error` 语句生效。
请注意,在使用 `On Error Resume Next` 时要谨慎,确保仅跳过预期的特定错误,并在合适的地方进行错误处理。
阅读全文