2016-05-26 7 views
0

クエリをエクスポートしようとしたときにエラーが発生しました。その理由は、ユーザーがファイルを開いたままにしておくことがあるためです。だから私はいくつかのエラー処理を試みて、Permission Deniedエラーが発生した場合は、何をするかを説明するMsgBoxを表示するようにしました。パーミッションが拒否されたエラーがない場合は、そのまま続行してMsgBoxを表示しないでください。ただし、常にMsgBoxと表示されています。Access VBA:Onエラーが常にエラー発生の対象となる行に移動する

VBA:

Private Sub Command360_Click() 

    Dim myQueryName As String 
    Dim myExportFileName As String 


     myQueryName = "qry_A" 
     myExportFileName = "J:\blah\Spreadsheet_" & Me![Combo353].Value & ".xlsx" 
     If Len(myExportFileName) > 0 Then 
      On Error GoTo Err_Msg 
      Kill myExportFileName 
     End If 
     DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, myQueryName, myExportFileName 
     Application.FollowHyperlink myExportFileName 


Err_Msg: MsgBox "You must close the spreadsheet in order to export.", vbOKOnly 

End Sub 
+0

「MsgBox」が*常に*表示されている理由を直感的に理解していますが、エラーで表示されるようにコードを書く方法はわかりません。(VBAの経験はあまりありません) – whatwhatwhat

答えて

1

私はそれを考え出したが、私はこのソリューションを向上させるために、任意の批評を聞きに開いています。

Err_Msg: If (Err.Number = 70) Then MsgBox "Error: (" & Err.Number & ")" & Err.Description & ". You must close the spreadsheet in order to export.", vbOKOnly Else Resume Next 

私が行うために必要なすべての条件は私が処理したかった正確なエラーに基づいていたErr_MsgラインにIf文を追加しました。

+1

このようなラベルを扱っているときは、「Exit Sub」をクリックします。元のコードにエラーがないと仮定すると、実行するたびに 'MsgBox'が表示されます。 'Err_Msg'ラベルの前に' Exit Sub'を追加すると、エラーがスローされないと、プログラムは 'Err_Msg'に達する前に終了し、' MsgBox'をオープンしません。しかし、あなたの答えで言及しているように、 'IF'ステートメントでエラー番号を呼び出すことが、特定のエラーに対する特定の応答を引き起こす最良の方法です。 – MoondogsMaDawg

関連する問題