ACC2000: GotoRecord Macro Action Behaves Unexpectedly

ID: Q208605


The information in this article applies to:

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


SYMPTOMS

The GotoRecord macro action doesn't behave as you would expect when you use it in an AutoKeys macro. Instead of changing the record of the active form, it changes the record of a form in the background.


CAUSE

These symptoms occur when you use the GotoRecord action in an AutoKeys macro while a form is open with a Timer event running.


RESOLUTION

Microsoft provides programming examples for illustration only, without warranty either expressed or implied, including, but not limited to, the implied warranties of merchantability and/or fitness for a particular purpose. This article assumes that you are familiar with the programming language being demonstrated and the tools used to create and debug procedures. Microsoft support professionals 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 needs. If you have limited programming experience, you may want to contact a Microsoft Certified Solution Provider or the Microsoft fee-based consulting line at (800) 936-5200. For more information about Microsoft Certified Solution Providers, please see the following page on the World Wide Web:

http://www.microsoft.com/mcsp/
For more information about the support options available from Microsoft, please see the following page on the World Wide Web:

http://www.microsoft.com/support/supportnet/overview/overview.asp
To achieve the desired result of selecting the next or previous record on the active form when you press a predefined key, follow these steps:
  1. Create a module and type the following line in the Declarations section if it is not already there:


  2. 
    Option Explicit 
  3. Type the following procedures:


  4. 
    Function GotoPreviousRecord()
       On Error Goto GotoPreviousErrorHndlr
          ' Screen.ActiveForm.Name forces the GotoRecord action
          ' to be applied to the active form.
          DoCmd.GoToRecord acForm, Screen.ActiveForm.Name, acPrevious
       ExitGotoPreviousRecord:
          Exit Function
       GotoPreviousErrorHndlr:
          MsgBox Error$
          Resume ExitGotoPreviousRecord
    End Function
    
    Function GotoNextRecord()
       On Error Goto GotoNextErrorHndlr
          ' Screen.ActiveForm.Name forces the GotoRecord action
          ' to be applied to the active form.
          DoCmd.GoToRecord acForm, Screen.ActiveForm.Name, acNext
       ExitGotoNextRecord:
          Exit Function
       GotoNextErrorHndlr:
          MsgBox Error$
          Resume ExitGotoNextRecord
    End Function 
  5. Create an AutoKeys macro and assign each key stroke to the macro action RunCode. The Function Name argument of the RunCode action is the name of the custom function that you use. If you use the examples in step 2, it is either GotoPreviousRecord() or GotoNextRecord().



MORE INFORMATION

CAUTION: Following the steps in this example will modify the sample database Northwind.mdb. You may want to back up the Northwind.mdb file and perform these steps on a copy of the database.

Steps to Reproduce Behavior

  1. Open the sample database Northwind.mdb, and then Open the Employees form in Design view.


  2. Add a text box to the form header section, and set its Name property to CurrentTime.


  3. Set the TimerInterval property of the Employees form to 1000 (equal to one second).


  4. Set the OnTimer property of the Employees form to [Event Procedure] and click the Build (...) button.


  5. Type the following procedure for the OnTimer property's event procedure:


  6. 
    Private Sub Form_Timer()
       Me![CurrentTime] = Now()
    End Sub
    
    'This procedure updates the time in the CurrentTime control once every
    'second. 
  7. Create a macro named AutoKeys with the following settings:


  8. 
       Macro Name  Action
       ----------------------
       {F2}        GotoRecord
       {F3}        GotoRecord
    
       {F2} Actions
       -----------
       GotoRecord
       Record: Previous
    
       {F3} Actions
       -----------
       GotoRecord
       Record: Next 
  9. Close and save the macro.


  10. Open the Employees, Categories, and Customers forms. Make sure that either the Categories or Customers form is active.


  11. Press F3. Note that the AutoKeys macro does run but it selects the next record on the Employees form instead of the active form, as you would expect.



REFERENCES

For more information about AutoKeys, click Microsoft Access Help on the Help menu, type "AutoKeys" in the Office Assistant or the Answer Wizard, and then click Search to view the topic.

Additional query words: prb


Keywords          : kbdta McrProb 
Version           : WINDOWS:2000
Platform          : WINDOWS 
Issue type        : kbprb 

Last Reviewed: July 6, 1999