<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.vbex.ru/index.php?action=history&amp;feed=atom&amp;title=VBA%2FExcel%2FAccess%2FWord%2FForms%2FForm_Events</id>
		<title>VBA/Excel/Access/Word/Forms/Form Events - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.vbex.ru/index.php?action=history&amp;feed=atom&amp;title=VBA%2FExcel%2FAccess%2FWord%2FForms%2FForm_Events"/>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VBA/Excel/Access/Word/Forms/Form_Events&amp;action=history"/>
		<updated>2026-04-06T01:42:34Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.vbex.ru/index.php?title=VBA/Excel/Access/Word/Forms/Form_Events&amp;diff=1901&amp;oldid=prev</id>
		<title> в 16:33, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VBA/Excel/Access/Word/Forms/Form_Events&amp;diff=1901&amp;oldid=prev"/>
				<updated>2010-05-26T16:33:00Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 16:33, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.vbex.ru/index.php?title=VBA/Excel/Access/Word/Forms/Form_Events&amp;diff=1902&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VBA/Excel/Access/Word/Forms/Form_Events&amp;diff=1902&amp;oldid=prev"/>
				<updated>2010-05-26T12:48:29Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Assign form Recordset in its open action==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Sub Form_Open(Cancel As Integer)&lt;br /&gt;
    Dim con As ADODB.Connection&lt;br /&gt;
    Dim myRecordset As ADODB.Recordset&lt;br /&gt;
    Dim strFrmNm As String&lt;br /&gt;
    &lt;br /&gt;
    Set myRecordset = New ADODB.Recordset&lt;br /&gt;
    myRecordset.CursorType = adOpenKeyset&lt;br /&gt;
    myRecordset.LockType = adLockOptimistic&lt;br /&gt;
    Set con = New ADODB.Connection&lt;br /&gt;
    con.Open &amp;quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\store.mdb;&amp;quot;&lt;br /&gt;
       &lt;br /&gt;
    myRecordset.Open &amp;quot;SELECT * FROM Employees&amp;quot;, con&lt;br /&gt;
    Set Me.Recordset = myRecordset&lt;br /&gt;
    &lt;br /&gt;
    myRecordset.Close&lt;br /&gt;
    con.Close&lt;br /&gt;
    Set myRecordset = Nothing&lt;br /&gt;
    Set con = Nothing&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CancelEvent: DoCmd.CancelEvent()==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Sub Form_BeforeUpdate(Cancel As Integer)&lt;br /&gt;
   If MsgBox(&amp;quot;Are you sure you want to save changes to this record?&amp;quot;, _&lt;br /&gt;
              vbYesNo Or vbInformation, &amp;quot;Confirm Upate&amp;quot;) = vbNo Then&lt;br /&gt;
      DoCmd.CancelEvent&lt;br /&gt;
   End If&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Code for the Add Button==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Sub cmdAdd_Click()&lt;br /&gt;
    &amp;quot;Add a new row to the recordset&lt;br /&gt;
    Me.Recordset.AddNew&lt;br /&gt;
    Me.Recordset(&amp;quot;CompanyName&amp;quot;) = &amp;quot;New Company&amp;quot;&lt;br /&gt;
    Me.Recordset.Update&lt;br /&gt;
    &amp;quot;Move to the row that was added&lt;br /&gt;
    Me.Bookmark = Me.Recordset.Bookmark&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Code for the Find Button==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Sub cmdFind_Click()&lt;br /&gt;
    Dim strClientID As String&lt;br /&gt;
    Dim varBookmark As Variant&lt;br /&gt;
    varBookmark = Me.Recordset.Bookmark&lt;br /&gt;
    strClientID = InputBox(&amp;quot;Enter Client ID of Client You Want to Locate&amp;quot;)&lt;br /&gt;
    Me.Recordset.Find &amp;quot;ClientID = &amp;quot; &amp;amp; strClientID, Start:=1&lt;br /&gt;
    If Me.Recordset.EOF Then&lt;br /&gt;
        MsgBox &amp;quot;Client ID &amp;quot; &amp;amp; strClientID &amp;amp; &amp;quot; Not Found!!&amp;quot;&lt;br /&gt;
        Me.Recordset.Bookmark = varBookmark&lt;br /&gt;
    Else&lt;br /&gt;
        Me.Bookmark = Me.Recordset.Bookmark&lt;br /&gt;
    End If&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Code for the Move Next Button==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Sub cmdNext_Click()&lt;br /&gt;
    Me.Recordset.MoveNext&lt;br /&gt;
     If Me.Recordset.EOF Then&lt;br /&gt;
        Me.Recordset.MovePrevious&lt;br /&gt;
        MsgBox &amp;quot;Already at Last Record!!&amp;quot;&lt;br /&gt;
    End If&lt;br /&gt;
    Me.Bookmark = Me.Recordset.Bookmark&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Code for the Move Previous Button==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Sub cmdPrevious_Click()&lt;br /&gt;
    Me.Recordset.MovePrevious&lt;br /&gt;
    If Me.Recordset.BOF Then&lt;br /&gt;
        Me.Recordset.MoveNext&lt;br /&gt;
        MsgBox &amp;quot;Already at First Record!!&amp;quot;&lt;br /&gt;
    End If&lt;br /&gt;
    Me.Bookmark = Me.Recordset.Bookmark&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deleting a Record==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Sub cmdDelete_Click()&lt;br /&gt;
    &amp;quot;Ask user if he really wants to delete the row&lt;br /&gt;
    intAnswer = MsgBox(&amp;quot;Are You Sure???&amp;quot;, _&lt;br /&gt;
        vbYesNo + vbQuestion, _&lt;br /&gt;
        &amp;quot;Delete Current Record?&amp;quot;)&lt;br /&gt;
    &amp;quot;If he responds yes, delete the row and&lt;br /&gt;
    &amp;quot;move to the next row&lt;br /&gt;
    If intAnswer = vbYes Then&lt;br /&gt;
        Me.Recordset.Delete&lt;br /&gt;
        Call cmdNext_Click&lt;br /&gt;
        Me.Refresh&lt;br /&gt;
    End If&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Form Before Update action==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Sub Form_BeforeUpdate(Cancel As Integer)&lt;br /&gt;
    If IsNull(Me.txtContactFirstName) Or _&lt;br /&gt;
        IsNull(Me.txtContactLastName) Or _&lt;br /&gt;
        IsNull(Me.txtCompanyName) Or _&lt;br /&gt;
        IsNull(Me.txtPhoneNumber) Then&lt;br /&gt;
        MsgBox &amp;quot;The Contact First Name, &amp;quot; &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;
            &amp;quot;Contact Last Name, &amp;quot; &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;
            &amp;quot;Company Name, &amp;quot; &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;
            &amp;quot;And Contact Phone Must All Be Entered&amp;quot;, _&lt;br /&gt;
            vbCritical, _&lt;br /&gt;
            &amp;quot;Canceling Update&amp;quot;&lt;br /&gt;
        Me.txtContactFirstName.SetFocus&lt;br /&gt;
        Cancel = True&lt;br /&gt;
    End If&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Form_Filter==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Sub Form_Filter(Cancel As Integer, FilterType As Integer) &lt;br /&gt;
    Select Case FilterType&lt;br /&gt;
        Case acFilterByForm&lt;br /&gt;
            MsgBox &amp;quot;You Just Selected Filter By Form&amp;quot;&lt;br /&gt;
        Case acFilterAdvanced&lt;br /&gt;
            MsgBox &amp;quot;You Are Not Allowed to Select Advanced Filter/Sort&amp;quot;&lt;br /&gt;
            Cancel = True&lt;br /&gt;
     End Select&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==If the data in the form dirty==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)&lt;br /&gt;
    &amp;quot;If the form is dirty and the user presses page up or&lt;br /&gt;
    &amp;quot;page down, ignore the keystroke&lt;br /&gt;
    If Me.Dirty Then&lt;br /&gt;
        If KeyCode = vbKeyPageDown Or _&lt;br /&gt;
           KeyCode = vbKeyPageUp Then&lt;br /&gt;
           KeyCode = 0&lt;br /&gt;
        End If&lt;br /&gt;
    End If&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IsLoad function==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Sub m()&lt;br /&gt;
    If Not IsLoaded(&amp;quot;frmClients&amp;quot;) Then&lt;br /&gt;
        msgBox &amp;quot;You must load this form from the Projects form&amp;quot;, _&lt;br /&gt;
            vbCritical, &amp;quot;Warning&amp;quot;&lt;br /&gt;
    End If&lt;br /&gt;
End Sub&lt;br /&gt;
Public Function IsLoaded(strFormName As String) As Boolean&lt;br /&gt;
    Const FORMOPEN = -1&lt;br /&gt;
    Const FORMCLOSED = 0&lt;br /&gt;
    If SysCmd(acSysCmdGetObjectState, acForm, strFormName) &amp;lt;&amp;gt; FORMCLOSED Then&lt;br /&gt;
        IsLoaded = True&lt;br /&gt;
    Else&lt;br /&gt;
        IsLoaded = False&lt;br /&gt;
    End If&lt;br /&gt;
End Function&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Key down event==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)&lt;br /&gt;
    If Me.Dirty Then&lt;br /&gt;
        If KeyCode = vbKeyPageDown Or _&lt;br /&gt;
           KeyCode = vbKeyPageUp Then&lt;br /&gt;
           KeyCode = 0&lt;br /&gt;
        End If&lt;br /&gt;
    End If&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==The Load Event Assigning a Recordset Object to the Form==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Sub Form_Load()&lt;br /&gt;
    Dim rst As ADODB.Recordset&lt;br /&gt;
    Set rst = New ADODB.Recordset&lt;br /&gt;
    rst.ActiveConnection = CurrentProject.Connection&lt;br /&gt;
    rst.CursorType = adOpenKeyset&lt;br /&gt;
    rst.CursorLocation = adUseClient&lt;br /&gt;
    rst.LockType = adLockOptimistic&lt;br /&gt;
    rst.Open &amp;quot;Select * from tblClients&amp;quot;, Options:=adCmdText&lt;br /&gt;
    Set Me.Recordset = rst&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==The Undo event executes before changes to a row are undone.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Sub Form_Undo(Cancel As Integer)&lt;br /&gt;
     If MsgBox(&amp;quot;You Have Attempted to Undo Changes &amp;quot; &amp;amp; _&lt;br /&gt;
         &amp;quot;to the Current Row.  Would You Like to Proceed &amp;quot; &amp;amp; _&lt;br /&gt;
         &amp;quot;with the Undo Process?&amp;quot;, _&lt;br /&gt;
         vbYesNo) = vbYes Then&lt;br /&gt;
         &amp;quot;If he responds yes, proceed with the undo&lt;br /&gt;
         Cancel = False&lt;br /&gt;
     Else&lt;br /&gt;
         &amp;quot;If he responds no, cancel the undo&lt;br /&gt;
         Cancel = True&lt;br /&gt;
     End If&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Writing the Form_Error Event Procedure==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Sub Form_Error(DataErr As Integer, Response As Integer) &lt;br /&gt;
    Dim custId As String &lt;br /&gt;
    &lt;br /&gt;
    Const conDuplicateKey = 3022 &lt;br /&gt;
    &lt;br /&gt;
    If DataErr = conDuplicateKey Then &lt;br /&gt;
        Response = acDataErrContinue &lt;br /&gt;
        Debug.Print &amp;quot;Customer &amp;quot; &amp;amp; custId &amp;amp; &amp;quot; already exists.&amp;quot; &lt;br /&gt;
    End If &lt;br /&gt;
End Sub &lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==You can not only check how the filter was invoked, but you can also intercept the process when the filter is applied.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)&lt;br /&gt;
    Dim intAnswer As Integer&lt;br /&gt;
    If ApplyType = acApplyFilter Then&lt;br /&gt;
        intAnswer = MsgBox(&amp;quot;You just selected the criteria: &amp;quot; &amp;amp; _&lt;br /&gt;
                         Chr(13) &amp;amp; Chr(10) &amp;amp; Me.Filter &amp;amp; _&lt;br /&gt;
                         Chr(13) &amp;amp; Chr(10) &amp;amp; &amp;quot;Are You Sure You Wish &amp;quot; &amp;amp; __&lt;br /&gt;
                         to Proceed?&amp;quot;, vbYesNo + vbQuestion)&lt;br /&gt;
        If intAnswer = vbNo Then&lt;br /&gt;
            Cancel = True&lt;br /&gt;
        End If&lt;br /&gt;
    End If&lt;br /&gt;
End Sub&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>