2016-01-27 4 views
2

У меня есть следующий код:MS Access/VBA: добавить, если условие УВЫ

Private Sub Command66_Click() 
DoCmd.SetWarnings False 
DoCmd.DeleteObject acTable, "Table1" 
DoCmd.DeleteObject acTable, "Table2" 
DoCmd.DeleteObject acTable, "Table3" 
DoCmd.SetWarnings True 
End Sub 

Проблема заключается в том, что если «Table1» нет, я получаю/отладку Ошибки VBA. Могу ли я добавить какое-то условие, что если скрипт не найдет «Table1», он должен пойти дальше и удалить остальные 2 таблицы, не возвращая никакого сообщения об ошибке?

+2

Смотрите, если он существует первый: [как проверить, существует ли таблица или нет в ms-доступе для макросов vb?] (http://stackoverflow.com/questions/3350645/how-to-check-if-table-is-exists-or-not-in-ms -access-for-vb-macro) –

ответ

4

Вы имеете в виду погрешность? Вот пример того, как можно «ловушка» ошибка - Если произошла ошибка, пытаясь удалить Table1 он спросит вас, если вы хотите продолжить:

Private Sub Command66_Click() 
DoCmd.SetWarnings False 

On Error Resume Next 
DoCmd.DeleteObject acTable, "Table1" 

If Err.Number > 0 Then 
    Err.Clear 
    On Error GoTo 0 
    If MsgBox("There was an error trying to delete Table1, do you want to continue?", vbYesNo) = vbYes Then 
     DoCmd.DeleteObject acTable, "Table2" 
     DoCmd.DeleteObject acTable, "Table3" 
    End If 
End If 
DoCmd.SetWarnings True 
End Sub 
2

Если вы решили ловушку и игнорировать эту ошибку, начните игнорирование только ошибка 7874 (Microsoft Access не может найти объект «). Вы можете не игнорировать другие ошибки, например, когда таблица используется.

Private Sub Command66_Click() 

    Dim strMsg As String 

On Error GoTo ErrorHandler 

    DoCmd.DeleteObject acTable, "Table1" 
    DoCmd.DeleteObject acTable, "Table2" 
    DoCmd.DeleteObject acTable, "Table3" 

ExitHere: 
    Exit Sub 

ErrorHandler: 
    Select Case Err.Number 
    Case 7874 'Microsoft Access can't find the object 
     Resume Next 
    Case Else 
     strMsg = "Error " & Err.Number & " (" & Err.Description _ 
      & ") in procedure Command66_Click" 
     MsgBox strMsg 
     GoTo ExitHere 
    End Select 
End Sub 

Примечания:

  • Если вы обнаружили другие ошибки, которые вы хотите игнорировать, вы можете добавить эти номера ошибок в первом Case заявлении: Case 7874, <another number here>
  • я не вижу никаких причин, чтобы включить SetWarnings в этой процедуре.
  • Рассмотрите возможность использования Alex suggestion, прежде чем пытаться его удалить.
-1

Ну, если вы хотите удалить таблицу, которая существует только в Access, то вы можете просто проверить для объекта, вот как вы обычно делаете это:

On Error Resume Next 
If IsObject(CurrentDb.TableDefs("Table1")) Then 
    DoCmd.DeleteObject acTable, "Table1" 
End If 
+0

Вы положили On Error Resume Next before if statement? – Arctics

Смежные вопросы