I think the line On Error GoTo 0 doesn't help too much. This just can avoid the error checking on the next lines. Maybe after the shOut.Activate is placed the 0 label. At the end should be added the error trapping routine:
If (Err.Number <> 0) Then
Err.Clear()
End If