[AccessD] Close All Forms

Dan Waters dwaters at usinternet.com
Sat Aug 20 08:59:08 CDT 2005


I once solved a 'form corruption' problem by:

1) Comment ALL the code in the form
2) Decompile
3) Exit Access
4) Open Application
5) Uncomment all the code 
6) Compile

The reason I did this was because a form on one user's PC was erroring out
on a line of code, but no one else's was doing that.  The above solved the
problem.  I'm guessing that commenting out the VBA code and decompiling
completely removed the offending p-code, then uncommenting and compiling
created completely new p-code.  A note - the form had been originally
created in A95, had been modified heavily, and was being used in AXP.

HTH,

Dan Waters

-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of MartyConnelly
Sent: Friday, August 19, 2005 11:29 PM
To: Access Developers discussion and problem solving
Subject: Re: [AccessD] Close All Forms

You could also try a decompile just in case something flakey happened in 
the p-code

Barbara Ryan wrote:

>Since the application is now Access 2002, I can ditch the code I'm using
and
>use Charlotte's approach or Marty's....Thanks!  Barb
>
>
>----- Original Message ----- 
>From: "Charlotte Foust" <cfoust at infostatsystems.com>
>To: "Access Developers discussion and problem solving"
><accessd at databaseadvisors.com>
>Sent: Friday, August 19, 2005 6:33 PM
>Subject: RE: [AccessD] Close All Forms
>
>
>  
>
>>Yes, I know that Lambert.  I just wondered if it blew up the other way
>>too, because if so it suggests something is corrupted.  Of course, there
>>is an entirely different way to do it in Access 2000 and later: use the
>>AccessObject and loop through the Application.CurrentProject.AllForms
>>collection test the form's IsLoaded property before closing it. ;-}
>>
>>Charlotte
>>
>>
>>-----Original Message-----
>>From: Heenan, Lambert [mailto:Lambert.Heenan at aig.com]
>>Sent: Friday, August 19, 2005 2:14 PM
>>To: 'Access Developers discussion and problem solving'
>>Subject: RE: [AccessD] Close All Forms
>>
>>
>>It's normal practice to go in reverse when destroying items in a
>>collection. Here's why...
>>
>>Say there are three forms open. With this code
>>
>>For i = Forms.Count - 1 To 0 Step -1
>>
>>On the first time through Forms.Count - 1 is evaluated as 2, and I is
>>set to 2.
>>
>>Then DoCmd.Close acForm, Forms(i).Name will close some form in the
>>collection (which is closed is unspecified as collections are not
>>sorted).
>>
>>Next time round the loop i is set to 1 and another form is closed. Etc.
>>etc.
>>
>>But if we try doing this in a 'forward' direction we have...
>>
>>           For i = 0 to Forms.Count - 1
>>                If Forms(i).Name <> "frmMainMenu" Then
>>                    DoCmd.Close acForm, Forms(i).Name
>>                End If
>>            Next i
>>
>>First time round Count = 3, i is set to 0 and "forms(0)" closes. Next
>>time round Count = 2, i = 1 and "forms(1)" closes Next time round Count
>>= 1, i = 2 and "Forms(2).Name" generates an error 2456, "The number you
>>user to refer to the form is invalid", which is the collection's
>>equivalent of "Subscript out of range"
>>
>>The For loop is optimized by the compiler so that the termination
>>condition
>>(Forms.Count-1) is only evaluated once. That's why you do it in reverse.
>>
>>
>>
>>None of this explains why Barbara is seeing Access crash though. Her
>>code is totally legitimate. It's not even anything to do with the fact
>>that the 'Function' does not return a value. I'm sure she's set it up
>>like that so it can be called from an AutoKey macro.
>>
>>So we are left with the possibility that the applications p-code is
>>corrupt. Time to back it up, then decompile and compact. With any luck
>>that will fix it. If not, import all the objects into a new database.
>>
>>Lambert
>>
>>-----Original Message-----
>>From: accessd-bounces at databaseadvisors.com
>>[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Charlotte
>>Foust
>>Sent: Friday, August 19, 2005 4:36 PM
>>To: Access Developers discussion and problem solving
>>Subject: RE: [AccessD] Close All Forms
>>
>>
>>Is there any particular reason you're using a reverse step in this? Have
>>you tried it like this:
>>
>>           For i = 0 to Forms.Count - 1
>>                If Forms(i).Name <> "frmMainMenu" Then
>>                    DoCmd.Close acForm, Forms(i).Name
>>                End If
>>            Next i
>>
>>Does that also bail out on End Function?
>>
>>Charlotte Foust
>>
>>
>>-----Original Message-----
>>From: Barbara Ryan [mailto:BarbaraRyan at cox.net]
>>Sent: Friday, August 19, 2005 11:52 AM
>>To: Access List
>>Subject: [AccessD] Close All Forms
>>
>>
>>I have used the following code successfully in Access 97 to close all
>>forms when a specific function key is pressed.  However, in Access 2002,
>>this code causes the error box to appear (with the 2 options to send an
>>error report to Microsoft or not) and then closes Access.  Does anyone
>>know why?
>>
>>    Function CloseAllForms()
>>        Dim i As Integer
>>        ' Loop through the collection of open forms and close them
>>(except for the main menu)
>>        If Forms.Count > 0 Then
>>            For i = Forms.Count - 1 To 0 Step -1
>>                If Forms(i).Name <> "frmMainMenu" Then
>>                    DoCmd.Close acForm, Forms(i).Name
>>                End If
>>            Next i
>>        End If
>>    End Function
>>
>>Thanks,
>>Barb Ryan
>>
>>-- 
>>AccessD mailing list
>>AccessD at databaseadvisors.com
>>http://databaseadvisors.com/mailman/listinfo/accessd
>>Website: http://www.databaseadvisors.com
>>-- 
>>AccessD mailing list
>>AccessD at databaseadvisors.com
>>http://databaseadvisors.com/mailman/listinfo/accessd
>>Website: http://www.databaseadvisors.com
>>-- 
>>AccessD mailing list
>>AccessD at databaseadvisors.com
>>http://databaseadvisors.com/mailman/listinfo/accessd
>>Website: http://www.databaseadvisors.com
>>-- 
>>AccessD mailing list
>>AccessD at databaseadvisors.com
>>http://databaseadvisors.com/mailman/listinfo/accessd
>>Website: http://www.databaseadvisors.com
>>    
>>
>
>  
>

-- 
Marty Connelly
Victoria, B.C.
Canada



-- 
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com




More information about the AccessD mailing list