2016-05-26 6 views
0

Ich bekam eine Permission denied Fehler beim Versuch, eine Abfrage zu exportieren. Der Grund dafür ist, dass manchmal ein Benutzer die Datei geöffnet lässt. So entschied ich mich, einige Fehlerbehandlung zu versuchen und es so zu machen, dass, wenn der Permission Denied Fehler auftritt, dann sollte es ein MsgBox anzeigen, was zu tun ist. Wenn kein Fehler für die Berechtigung verweigert wird, sollte er einfach fortfahren und nicht die MsgBox anzeigen. Es wird jedoch immer die MsgBox angezeigt.Access VBA: Bei Fehler immer die Zeile für Fehler Auftreten gehen

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

Es macht einen intuitiven Sinn, warum die 'MsgBox' * immer * erscheint, ich weiß einfach nicht, wie ich den Code schreiben soll, damit er nur erscheint (nicht viel VBA-Erfahrung hier) – whatwhatwhat

Antwort

1

ich es herausgefunden, aber ich bin offen jeden critiquing, um zu hören, diese Lösung zu verbessern.

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 

Alles, was ich tun musste, war eine If Anweisung an die Err_Msg Zeilen hinzufügen, wenn die Bedingung auf dem genauen Fehler beruhte ich umgehen wollte.

+1

Es ist auch sehr wichtig zu verwenden 'Exit Sub', wenn Sie mit solchen Etiketten arbeiten. Angenommen, es gibt keinen Fehler im ursprünglichen Code, 'MsgBox' erscheint immer noch bei der Ausführung. Wenn Sie 'Exit Sub' vor der 'Err_Msg'-Bezeichnung hinzufügen, wird das Programm beendet, bevor es die' Err_Msg' erreicht und die 'MsgBox' nicht geöffnet wird. Aber wie Sie in Ihrer Antwort erwähnen, ist das Ausrufen einer Fehlernummer in einer 'IF'-Anweisung der beste Weg, spezifische Antworten auf bestimmte Fehler auszulösen. – MoondogsMaDawg

Verwandte Themen