Change lblHeading.Caption of report based on which form's buttonclicked

S

Song

I have 2 separate forms. Button on each form opens a report. One
button on one form says "OPEN" and one button on the other form says
"CLOSE"

I do not want to create one report for each button on separate forms.
I just want to use one report to serve both buttons on different forms

On my report, I have lblHeading. If OPEN button is clicked from one
form, I want to change lblHeading to something. If CLOSE button is
clicked from another from, I want to change lblHeading as well.

Thanks for helping.
 
D

Douglas J. Steele

What version of Access? Starting in Access 2002 (I believe), the ability to
pass an OpenArgs property was added. Pass anything you want as the OpenArgs
property, and check its value in the report's Open event.
 
S

Song

Hi, Steele:

I'm using Access 2007. I see OnOpen event of report but I don't know
how to use OpenArgs. I'd be appreciated if you can guide me on this.

Thanks.

Song

What version of Access? Starting in Access 2002 (I believe), the ability to
pass an OpenArgs property was added. Pass anything you want as the OpenArgs
property, and check its value in the report's Open event.
Hi, Steele:
 
D

Douglas J. Steele

Open the report along the lines of:

DoCmd.OpenReport "NameOfReport", OpenArgs:=Me.Name

Then, in the Open event of the report, check the value passed:

Private Sub Report_Open(Cancel As Integer)

Select Case Nz(Me.OpenArgs, vbNullString)
Case "NameOfForm1"
' do what you want if it was called from Form1
Case "NameOfForm2"
' do what you want if it was called from Form2
Case Else
' do you want to do anything if it was called from somewhere else?
End Select

End Sub

--
Doug Steele, Microsoft Access MVP
http://www.AccessMVP.com/DJSteele
Co-author: Access 2010 Solutions, published by Wiley
(no e-mails, please!)

Hi, Steele:

I'm using Access 2007. I see OnOpen event of report but I don't know
how to use OpenArgs. I'd be appreciated if you can guide me on this.

Thanks.

Song

What version of Access? Starting in Access 2002 (I believe), the ability
to
pass an OpenArgs property was added. Pass anything you want as the
OpenArgs
property, and check its value in the report's Open event.
Hi, Steele:
 
S

Song

Open the report along the lines of:

DoCmd.OpenReport "NameOfReport", OpenArgs:=Me.Name

Then, in the Open event of the report, check the value passed:

Private Sub Report_Open(Cancel As Integer)

  Select Case Nz(Me.OpenArgs, vbNullString)
    Case "NameOfForm1"
      ' do what you want if it was called from Form1
    Case "NameOfForm2"
      ' do what you want if it was called from Form2
    Case Else
      ' do you want to do anything if it was called from somewhere else?
  End Select

End Sub

--
Doug Steele, Microsoft Access MVPhttp://www.AccessMVP.com/DJSteele
Co-author: Access 2010 Solutions, published by Wiley
(no e-mails, please!)


Hi, Steele:

I'm using Access 2007. I see OnOpen event of report but I don't know
how to use OpenArgs. I'd be appreciated if you can guide me on this.

Thanks.

Song





Hi, Steele:




- Show quoted text -- Hide quoted text -

- Show quoted text -

Got it. If I have 2 items to pass, say heading and subheading, is any
efficient way to do it?
 
D

Douglas J. Steele

What I typically do is build a string to hold everything. To make it easier,
I'll use something like:

Dim strOpenArgs As String

strOpenArgs = "heading=" & strHeading & ";" & _
"subheading=" & strSubHeading

DoCmd.OpenReport "NameOfReport", OpenArgs:=strOpenArgs

Then, in the Open event of the report, I parse that string:

Private Sub Report_Open(Cancel As Integer)

Dim lngLoop As Long
Dim strHeading As String
Dim strSubheading As String
Dim varArg As Variant
Dim varArgs As Variant

strHeading = "default value"
strSubheading = "default value"

If Len(Me.OpenArgs & vbNullString) > 0 Then
' Break the OpenArgs argument into the various parameters
' by splitting on the semi-colons.
varArgs = Split(Me.OpenArgs, ";")
For lngLoop = LBound(varArgs) To UBound(varArgs)
' For each argument, split on the equal sign.
' The name of the argument will be varArg(0),
' the value of the argument will be varArg(1)
varArg = Split(varArgs(lngLoop), "=")
If UBound(varArg) > 0 Then
Select Case LCase(varArg(0))
Case "heading"
strHeading = varArg(1)
Case "subheading"
strSubheading = varArg(1)
Case Else
MsgBox "You passed " & varArg(0) & vbCrLf & _
"Sorry: I don't know what to do with " & varArg(0) & "!"
End Select
End If
Next lngLoop
End If

' Check to see whether or not you have values for strHeading
' and strSubheading, and process accordingly.


End Sub
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top