我的代码如下,奇怪的是即使代码中没有错误,Errorhandler
程序仍在执行......可能是什么问题?
运行没有任何错误处理程序的代码不会产生任何错误,但是当我包含错误处理语句时,msgbox
下的Errorhandler
仍会出现!
代码
Public Sub ExportGraphs(Optional PivotExport As Boolean)
' Exports only graphs on the "Mainwindow" sheet to a new worksheet
Dim wsh As Worksheet: Set wsh = Sheets.Add
Dim source_sht As Worksheet: Set source_sht = Sheets("Mainwindow")
ActiveWindow.Zoom = 70
On Error GoTo Errorhandler
With wsh
If source_sht.OLEObjects("Btn_CurrentTime").Object.Value = True Then
.Name = source_sht.OLEObjects("CombBox_Instruments").Object.Value & " " & source_sht.OLEObjects("DTPicker_FROM").Object.Value _
& "-" & source_sht.OLEObjects("DTPicker_TO").Object.Value
Else
.Name = source_sht.OLEObjects("CombBox_Instruments").Object.Value & " " & "Max_Possible_To" _
& "-" & source_sht.OLEObjects("DTPicker_TO").Object.Value
End If
End With
Dim source_chart As ChartObject
Dim target_rng As Range: Set target_rng = wsh.Range("A1")
For Each source_chart In source_sht.ChartObjects
source_chart.CopyPicture xlScreen, xlBitmap
target_rng.PasteSpecial
Set target_rng = target_rng.Offset(20, 0)
Next
If PivotExport = True Then
Debug.Print "se"
End If
Errorhandler:
MsgBox "An export sheet for this ticker and timeline already exists"
End Sub
答案 0 :(得分:4)
@dee提供了正确答案。
Errorhandler:
只是占位符。它并不像你想象的那样运作。您正在使用它像If... Then...
语句:
If Error Then
Show MsgBox
Else
Skip MsgBox
End If
由于错误处理程序只是一个占位符而不是If... Then...
,占位符之后的代码将运行,无论错误或无错误。要解决此问题,请在Exit Sub
行上方添加Errorhandler:
:
Exit Sub
Errorhandler:
MsgBox "An export sheet for this ticker and timeline already exists"
End Sub
答案 1 :(得分:4)
在这段代码中,ErrorHandler:
就是所谓的line label。
Errorhandler:
MsgBox "An export sheet for this ticker and timeline already exists"
End Sub
行标签不是可执行代码,而只是一个标记,可以告诉其他代码通过任何 GoTo Statement跳转到哪里。有了这些知识,它们显然不是错误处理程序所独有的。
此处的解决方案是使用Exit Statement从Sub
“早期”返回。
Exit Sub
Errorhandler:
MsgBox "An export sheet for this ticker and timeline already exists"
End Sub
其他人可能不同意我,但我喜欢构建我的错误处理,以便代码始终停止在Exit Sub
上执行。如果代码在End Sub
上结束执行,则出现问题。