Microsoft KB Archive/173517

= ACC2: How to Close Datasheet Form Without Saving Design Changes =

Article ID: 173517

Article Last Modified on 10/11/2006

-

APPLIES TO


 * Microsoft Access 2.0 Standard Edition

-



This article was previously published under Q173517



Moderate: Requires basic macro, coding, and interoperability skills.



SUMMARY
When you open a form in datasheet view in Microsoft Access version 2.0, and then make any modifications to the layout of the form, such as increasing the width of a column, Microsoft Access prompts you to save the changes to the form when you close it.

If you do not have design rights to the datasheet form, Microsoft Access cannot save the changes you made while viewing the form. When you try to save the form, you receive the following error message:

You don't have permissions to modify form ' '



MORE INFORMATION
To prevent Microsoft Access from prompting you to save the form, use one of the following methods. The first method involves embedding your datasheet form as a subform within an unbound main form. The second method uses application programming interface (API) function calls in an Access Basic procedure.

Method 1
  Create a new blank form and set the following properties:   Form: frmTest Caption:   ControlSource: Default View: Single Form Scroll Bars: Neither Record Selectors: No  Navigation Buttons: No                     Add your datasheet form as a subform to the new blank form. Resize and reposition the subform to remove all the unused space in the master form. Save the master form. When you open the master form, it looks like your datasheet form; however, changing the column size or font doesn't affect the datasheet form's design. Therefore, closing the master form doesn't prompt you to save any changes.

Method 2
Advanced: Requires expert coding, interoperability, and multi-user skills.

This method assumes that you are familiar with Access Basic and with creating Microsoft Access applications using the programming tools provided with Microsoft Access. For more information about Access Basic, please refer to the "Building Applications" manual.

Microsoft provides programming examples for illustration only, without warranty either expressed or implied. This includes, but is not limited to, the implied warranties of merchantability or fitness for a particular purpose. This article assumes that you are familiar with the programming language that is being demonstrated and with the tools that are used to create and to debug procedures. Microsoft support engineers can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific requirements. NOTE: In the following sample code, an underscore (_) at the end of a line is used as a line-continuation character. Remove the underscore from the end of the line when re-creating this code.

You may have some Microsoft Windows API functions defined in an existing Microsoft Access library; therefore, your declarations may be duplicates. If you receive a duplicate procedure name error message, remove or comment out the declarations statement in your code.

  Create a new form to prompt the user. This is necessary to prevent the existing datasheet form from calling the API function. <pre class="fixed_text">Form: frmCloseDialog -     Name: frmCloseDialog Caption: Close Datasheet form Recordsource: Default View: Single Form Views Allowed: Form Scroll Bars: Neither Record Selector: No     Navigation Buttons: No      Border Style: Dialog

Label: Name: lblPrompt Caption: Are you sure you want to close the form? Command Button: Name: cmdCloseForm Caption: OK        On Click: [Event Procedure] Command Button: Name: cmdCancel Caption: Cancel On Click: [Event Procedure] </li>  On the View menu, click Code to display the form's module. Type the following lines of code within the form's module: Option Explicit

Declare Function KillForm Lib "User" _ Alias "DestroyWindow" (ByVal intWinHandle As Integer) As Integer

Sub cmdCancel_Click On Error GoTo ErrCmdCancel DoCmd Close

ExitCmdCancel: Exit Sub

ErrCmdCancel: MsgBox Error$ Resume ExitCmdCancel End Sub

Sub cmdCloseForm_Click Dim intResult As Integer, intHnd As Integer On Error GoTo errCloseForm

' Set the focus back to the datasheet form prior to saving the ' record.

Forms![frmDatasheet].SetFocus DoCmd DoMenuItem A_FORMBAR, A_FILE, A_SAVERECORD, ,A_MENU_VER20

' Grab the window handle of the datasheet form, and ' Invoke the DestroyWindow API call to close the datasheet form.

intHnd = forms!frmDatasheet.hwnd intResult = KillForm(intHnd)

' Close the cancel dialog form frmCloseDialog. DoCmd Close A_FORM, Me.Name ExitCloseForm: Exit Sub ErrCloseForm:                ' In case the datasheet form wasn't                                    ' open. MsgBox Error$ Resume ExitCloseForm End Sub </li> Close and save the form created in step 3 as frmCloseDialog.</li> Open the datasheet form (frmDatasheet) in Design view and view its properties.</li>  Set the form's OnUnload property to the following event procedure: Sub Form_Unload (Cancel As Integer) ' Cancel the unload event of the Datasheet form, and open ' the dialog form created within Step 1.

Cancel = True DoCmd OpenForm "frmCloseDialog" End Sub </li> Close and save the form.</li> Open the datasheet form, and modify the width of the first column. Note that when you try to close the datasheet form, the dialog form prompts you to select either OK or Cancel. When you click OK, the datasheet form closes without prompting you to save the changes to the form.</li></ol>

<div class="references_section">