我有多个过程类似于下面的过程。代码本身是功能性的,并且可以执行预期的操作,但是现在我有一个问题和一个有关错误处理的问题:
On Error GoTo 0
:在mySlide.Shapes.PasteSpecial DataType:=ppPasteEnhancedMetafile
行中引起我麻烦的错误。据我了解,On Error GoTo 0
将错误处理重置为VBA中的默认行为,这意味着我应该以正常的VBA方式显示错误。因此,我在这里使用了两次:一次是在粘贴复制内容的行之后,一次是在调用ErrorHandler1
(和2)之后。这有意义吗?我的理由是,对于On Error GoTo ErrorHandler1
,我只想捕获错误-2147188160
,而在其余代码中,我要普通的VBA错误消息。错误的可能性不大,因为那里没有很多代码,但是仍然如此。
Sub SubSlide1(wsKAP As Worksheet)
Set mySlide = myPresentation.Slides(1)
RepeatOnError1:
Set rng = wsKAP.Range("AC2:AN29")
rng.Copy
DoEvents
On Error GoTo ErrorHandler1
mySlide.Shapes.PasteSpecial DataType:=ppPasteEnhancedMetafile
On Error GoTo 0
Set myShape = mySlide.Shapes(mySlide.Shapes.Count)
With myShape
.Left = 20
.Top = 48
.Width = 623
End With
RepeatOnError2:
wsKAP.Columns("K:M").EntireColumn.Hidden = False
On Error GoTo 0
Set rng = wsKAP.Range("A187:V199")
rng.Copy
DoEvents
On Error GoTo ErrorHandler2
mySlide.Shapes.PasteSpecial DataType:=ppPasteEnhancedMetafile
Set myShape = mySlide.Shapes(mySlide.Shapes.Count)
With myShape
.Left = 20
.Top = 363
.Width = 663
End With
wsKAP.Columns("K:M").EntireColumn.Hidden = True
Application.CutCopyMode = False
Exit Sub
ErrorHandler1:
On Error GoTo 0
If Err.Number = -2147188160 Then
Call ErrorHandling(1)
Else
MsgBox "Fehler: " & Err.Number & ": " & Err.Description & vbNewLine & "Makro wird weiter ausgeführt."
End If
Resume RepeatOnError1
ErrorHandler2:
On Error GoTo 0
If Err.Number = -2147188160 Then
Call ErrorHandling(2)
Else
MsgBox "Fehler: " & Err.Number & ": " & Err.Description & vbNewLine & "Makro wird weiter ausgeführt."
End If
Resume RepeatOnError2
End Sub
Sub ErrorHandling(Number As Long)
If ErrorCount(Number) > 10 Then
MsgBox "Too many errors (-2147188160) in ErrorCount(" & Number & "). Canceling."
End
End If
ErrorCount(Number) = ErrorCount(Number) + 1
Debug.Print "ErrorCount" & Number & " is " & ErrorCount(Number)
End Sub
ErrorHandler1
中的else语句被触发。我打算使用else
的目的是让我知道GoTo ErrorHandler1
中遇到但不是-2147188160
的任何错误。据我所知,“错误0”表示没有错误,那么VBA如何结束? 编辑:我现在已经对其进行了重新排列,并添加了End
。我移动了Resume
语句,因为否则我可能会出现无限错误循环。
ErrorHandler1:
If Err.Number = -2147188160 Then
Call ErrorHandling(1)
Resume RepeatOnError1
Else
MsgBox "Fehler: " & Err.Number & ": " & Err.Description & vbNewLine & "Makro wird weiter ausgeführt."
End
End If
On Error GoTo 0
ErrorHandler2:
If Err.Number = -2147188160 Then
Call ErrorHandling(2)
Resume RepeatOnError2
Else
MsgBox "Fehler: " & Err.Number & ": " & Err.Description & vbNewLine & "Makro wird weiter ausgeführt."
End
End If
On Error GoTo 0
End Sub
答案 0 :(得分:2)
If Err.Number = -2147188160 Then On Error GoTo 0
出现错误时,转到0还可以“清除”任何当前错误。因此,您需要先清除它,然后再检查它是否等于-2147188160。重新排列这些语句,看看效果是否更好:
Prices displayed as: 0.336
Taxes: 0.017
But grand total needed to be: 0.350 (instead of 0.353)