• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1075
  • Last Modified:

Set Focus to Report or Form

I am having a little trouble when printing.  Because I have some code that occurs on timer from a main screen, sometime when printing, I print the main screen.  This is because the focus moves to the main screen while the code runs.  I know I can move the focus to a control, can I move the focus back to a form or report ?.
0
beams
Asked:
beams
  • 4
  • 3
  • 2
  • +1
1 Solution
 
nico5038Commented:
I would start with trying to get rid of the timer.
Do you really need it ?

Nic;o)
0
 
NosterdamusCommented:
Hi beams,

To set the focus to a form/report, you can use:
Forms![MyFormName]!ControlName.SetFocus
Where ControlName is a control (textbox, listbox, combobox, etc.) placed in the form/report.

BTW, Nico has a good point. If you can, deactivate the OnTimer before printting and activate it back again when printting is finnished.

HTH,

Nosterdamus
0
 
beamsAuthor Commented:
I use the timer to check the database for new messages when in a network enviroment.  Is there another way to prompt a user on a network that he a message in the database.
0
Get 10% Off Your First Squarespace Website

Ready to showcase your work, publish content or promote your business online? With Squarespace’s award-winning templates and 24/7 customer service, getting started is simple. Head to Squarespace.com and use offer code ‘EXPERTS’ to get 10% off your first purchase.

 
nico5038Commented:
I can imagine that you offer the user a button or form to check by him self, but otherwise you could also create an e-mail to him, thus even showing there's something new when he's not working with the database.

I assume the database is also filled using access.
When you have MS-SQL it's even easier as you'll be able to place a trigger on a table update to send a mail. There has to be however a MAPI installed on the server.

Nic;o)
0
 
beamsAuthor Commented:
A message box is displayed when the user gets a new message.  This all works very well because the actual message is also stored in the database.  I would like to keep the function but as I say the only problem I have is trying to find a way of ensuring the focus is back to the form or report after the timer event has finished.
0
 
NosterdamusCommented:
Hi beams,

If you are up to some coding, then you could consider the following method:
1. Declare a Global Variable (strCurrentFormReport).
2. You'll have to create some push/pop mechanism that will set the above variable to the actual form/report name to set focus to after the OnTimer event is done.
3. Every time you close a form/report, or open one, call a routine that will set the variable to the proper value.
4. Just before exitting the OnTimer event, use somethilng like:

Forms(strCurrentFormReport)!ControlName.SetFocus

HTH,

Nosterdamus
0
 
beamsAuthor Commented:
This is what I do at the moment.  The problem is with reports, If I open the report with the Docmd, I cant determine if the report was being previewed or printed.


Private Sub Form_Timer()
On Error Resume Next

Dim tmpDiaryList As Long, LoadedReportName As String
Dim frmCurrentReport As Report, frmCurrentForm As Form
Set frmCurrentReport = Screen.ActiveReport
Set frmCurrentForm = Screen.ActiveForm
LoadedReportName = frmCurrentReport.Name

If IsLoaded("frmPaymentsNew") Or IsLoaded("Orders") Or IsLoaded("Quote") _
    Or IsLoaded("Orders All") Or IsLoaded("frmTaxRecDetails") Then
    DoCmd.OpenForm frmCurrentForm.Name
    Exit Sub
End If
If LoadedReportName <> "" Then
    Exit Sub
End If

On Error GoTo Err_Form_Timer
 
If Awarelist = 0 Then
    Awarelist = val(DCount("[Diary_ID]", "Diary Menu Union"))
End If

    tmpDiaryList = val(DCount("[Diary_ID]", "Diary Menu Union"))

    If val(Awarelist) <= val(tmpDiaryList) Then
        Awarelist = val(tmpDiaryList)
        Dim response As Integer
        response = MsgBox("You have New Messages, view your messages ?", 292, "MESSAGE CENTRE")
        If response = 6 Then
            DoCmd.OpenForm "Message Centre"
        End If
    End If

DoCmd.OpenForm frmCurrentForm.Name

Exit_Form_Timer:
    Exit Sub

Err_Form_Timer:
    MsgBox Err.Description
    Resume Exit_Form_Timer

End Sub
0
 
nico5038Commented:
For this you could define a global variable in a module and set that before activating the form. In the form you can check that variable. (works only when reports are always triggered from VBA...)

Nic;o)
0
 
nico5038Commented:

No comment has been added lately, so it's time to clean up this TA.
I will leave a recommendation in Community Support that this question is:
 - PAQ'd and pts removed
Please leave any comments here within the
next seven days.

PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER !

Nic;o)
0
 
NetminderCommented:
Per recommendation, points NOT refunded and question closed.

Netminder
CS Moderator
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 4
  • 3
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now