2012-05-30 10 views
8

Jestem pewien, że to bardzo proste, ale nie mogę go znaleźć. Czy w przypadku zamknięcia formularza dostępu można anulować zamknięcie formularza? Mam test, który zlicza rekordy w tabeli. Jeśli ta tabela zawiera rekordy, chcę zapytać użytkownika, czy chce zamknąć, czy wrócić i pracować z nimi. Jak więc anulować zamknięcie zdarzenia?Jak anulować formularz zamknąć Zamknij zdarzenie?

+4

Nie edytuj problemu jako odpowiedzi! Jest to bardzo mylące dla kogoś, kto czyta to, co dla ciebie rozwiązało. Zapewnienie wadliwego kodu i poprawnego kodu osobno jest jednym rozwiązaniem. –

+0

Uważam, że formularze związane z MS-Access są trudne do kontrolowania w sposób problematyczny. Nie jestem pewien, co myśleli twórcy! – NoChance

Odpowiedz

11

Można użyć zdarzenia Zwolnij:

GlobalVar ButtonClicked 

Private Sub Form_Open(Cancel As Integer) 
    ButtonClicked = False 
End Sub 

Private ClickMe_Click(Cancel As Integer) 
    ButtonClicked = True 
End Sub 

Private Sub Form_Unload(Cancel As Integer) 
    If Not ButtonClicked Then 
     Cancel = True 
    End if 
End Sub 

Order of events for database objects

+0

Nie jestem pewien, czy rozumiem, czy powinienem przekazać coś do zdarzenia Form_Unload w zdarzeniu Close? – MAW74656

+0

Och, widzę, umieść test w Form_unload, a następnie ustaw Anuluj = Prawda. http://msdn.microsoft.com/en-us/library/aa211464%28v=office.11%29.aspx – MAW74656

+1

Dodałem znacznie więcej informacji o tym, jak z niego korzystać. – Fionnuala

0

Study i spróbuj tego kodu, pracował dla mnie. Zastąp niezbędne nazwy zmiennych wybranymi nazwami. Wklej kod w Form_unload Zdarzenie w formularzu. !!! UWAGA: Po wykonaniu tej operacji będzie trudno uzyskać dostęp do formularza w widoku projektu i układu

Private Sub Form_Unload(Cancel As Integer) 
     userresponse = MsgBox("Are you sure you want close? All your work wouldn't be saved", vbYesNo, "Database Information") 
     Select Case userresponse 
     Case 6 
      Cancel = False 
      'this line opens another form in my own case 
      DoCmd.OpenForm "EngMenu" 

     Case 7 
      Cancel = True 
      'this line keeps my own form open in my own case 
      DoCmd.OpenForm "UpdateForm" 


     Case Else: 

      MsgBox "You are not allowed to perform this operation", vbInformation, "Database Information" 
     End Select 
    End Subenter code here 
1

użyć „Form_BeforeUpdate (anulowanie As Integer)” zdarzenia i ustawić anulować True.

Należy zauważyć, że po prostu nie da się zamknąć w ogóle, chyba że doda się logikę, aby rzeczywiście umożliwić aktualizację bazy danych.