Page 1 of 2 12 LastLast
Results 1 to 15 of 20
  1. #1
    d9pierce1 is offline Expert
    Windows 10 Access 2019
    Join Date
    Jan 2012
    Location
    Oklahoma
    Posts
    655

    Report buttons to print, export, and email on report form


    Report.zip

    Hi all,
    I am trying to get my report form to Print, email, export to excel, export to PDF from buttons on my form instead of doing it from the preview!
    I have watched at least 15 videos this morning so far, have searched google, and have not found what I need to accomplish this from my form
    I can get it to print and so on one report but not the selected report.
    I attached sample db, opens to report form,
    And would love some assistance on this please.
    I am thinking if I copied the code to open the report and changed the Do.Cmd lines but not sure what to for each of the buttons!

    Code:
    DoCmd.OpenReport strDoc, acViewPreview, WhereCondition:=strWhere, OpenArgs:=strDescrip
    Thanks
    Dave

  2. #2
    Minty is offline VIP
    Windows 10 Office 365
    Join Date
    Sep 2017
    Location
    UK - Wiltshire
    Posts
    2,430
    No Sample attached Dave?
    DLookup Syntax and others http://access.mvps.org/access/general/gen0018.htm
    Please use the star below the post to say thanks if we have helped !
    ↓↓ It's down here ↓↓

  3. #3
    d9pierce1 is offline Expert
    Windows 10 Access 2019
    Join Date
    Jan 2012
    Location
    Oklahoma
    Posts
    655
    Report.Zip on origional post #1

  4. #4
    d9pierce1 is offline Expert
    Windows 10 Access 2019
    Join Date
    Jan 2012
    Location
    Oklahoma
    Posts
    655
    Update:
    I was able to get this to work by copying the origional code and adding some lines to each button. A lot of duplicate so most likely not the best
    practice but it does work.
    Thanks
    Dave

  5. #5
    Join Date
    May 2018
    Location
    Living in Scotland UK
    Posts
    1,147
    Hi Dave

    See if the attached is nearer what you need.

    On the Main form I created an Unbound Textbox to obtain the Businessnames PrimaryKey

    Then used the following On Click Event for the Print Button:-

    Code:
    Private Sub cmdPrintReport_Click()
    DoCmd.OpenReport "BusinessByAllEntitiesRpt", acPreview, , "[BusinessReportID]=" & Me.txtBusinessReportID
    End Sub
    Attached Files Attached Files

  6. #6
    moke123's Avatar
    moke123 is offline Me.Dirty=True
    Windows 11 Office 365
    Join Date
    Oct 2012
    Posts
    1,251
    A lot of duplicate so most likely not the best practice but it does work.
    Why not paste your code so someone can suggest refinements?
    If this helped, please click the star * at the bottom left and add to my reputation- Thanks

  7. #7
    d9pierce1 is offline Expert
    Windows 10 Access 2019
    Join Date
    Jan 2012
    Location
    Oklahoma
    Posts
    655
    ReportNew.zip

    Hi Moke123
    Here is the updated version. Basically I took the code from the open report button and added it to each of the on click events
    for my other buttons and added a line of code for each of them...
    Attached is db, opens to form!

    Code:
    'cmdEmail_Click I added
    DoCmd.SendObject acReport
        DoCmd.Close
    
    'cmdExportExcel_Click I added
    DoCmd.OutputTo acOutputReport, , acFormatXLS
        DoCmd.Close
    
    'cmdExportPDF_Click I added
    DoCmd.OutputTo acOutputReport, , acFormatPDF
        DoCmd.Close
    
    'cmdPrintReport_Click I added
    DoCmd.RunCommand acCmdPrint
        DoCmd.Close
    Now this does work however, it does create a lot of identical code with just a line or two difference.
    However, it does work!

    I am thinking maybe its possible to call CmdReport_Click and then add the lines I put in above for each button?
    Not sure if possible or not...

    UPDATE:
    So, I decided to jsut try it and added the following code to a new button.
    Code:
    Private Sub Command22_Click()
    Call CmdReport_Click
    DoCmd.RunCommand acCmdPrint
        DoCmd.Close
    End Sub
    This worked but when I hit cancel I got an error "The run command action was canceled"
    So I added On Error Resume Next and that got rid of error and worked just fine.
    Not so sure this is the correct method but shortens the duplicate code a lot....

    Thanks
    Dave
    Last edited by d9pierce1; 10-05-2022 at 05:23 AM. Reason: Added UPDATE

  8. #8
    d9pierce1 is offline Expert
    Windows 10 Access 2019
    Join Date
    Jan 2012
    Location
    Oklahoma
    Posts
    655
    Hi Mike60smart,
    Thanks for looking at this. Not quite what i had in mind but take a look at post #7
    as I updated it and it works, but lots of duplicate code I would love to shorten up
    if possible.
    Thanks
    dave

  9. #9
    Join Date
    Jan 2017
    Location
    Swansea,South Wales,UK
    Posts
    3,081
    Quote Originally Posted by d9pierce1 View Post
    ReportNew.zip

    Hi Moke123
    Here is the updated version. Basically I took the code from the open report button and added it to each of the on click events
    for my other buttons and added a line of code for each of them...
    Attached is db, opens to form!

    Code:
    'cmdEmail_Click I added
    DoCmd.SendObject acReport
        DoCmd.Close
    
    'cmdExportExcel_Click I added
    DoCmd.OutputTo acOutputReport, , acFormatXLS
        DoCmd.Close
    
    'cmdExportPDF_Click I added
    DoCmd.OutputTo acOutputReport, , acFormatPDF
        DoCmd.Close
    
    'cmdPrintReport_Click I added
    DoCmd.RunCommand acCmdPrint
        DoCmd.Close
    Now this does work however, it does create a lot of identical code with just a line or two difference.
    However, it does work!
    Thanks
    Dave
    If you have 3 different buttons, I cannot see how you cannot have seperate statements?
    If you had an output option for your 3 choices and just the one button, you would still have to test that option, then execute the relevant code block?

    Edit:
    Not sure why you are looping through the report listbox? It should not be multiselect?, you can only open one report at a time?
    You could create a sub in the form that would allow you to do most of the code once, then just the last few lines as you just posted per button?

    In fact you open the report with nothing set in where or openargs

    Code:
    Private Sub cmdEmailReport_Click()
    On Error GoTo Err_Handler
        'Purpose:  Open the report filtered to the items selected in the list box.
        'Author:   Allen J Browne, 2004.   http://allenbrowne.com
        Dim varItem As Variant      'Selected items
        Dim strWhere As String      'String to use as WhereCondition
        Dim strDescrip As String    'Description of WhereCondition
        Dim lngLen As Long          'Length of string
        Dim strDelim As String      'Delimiter for this field type.
        Dim strDoc As String        'Name of report to open.
        
        'strDelim = """"            'Delimiter appropriate to field type. See note 1.
         With Me.LstBusinessReport
            For Each varItem In .ItemsSelected
               strDoc = .Column(1, varItem) 'assumes list box has two columns, the first one holding the reportID is the bound one and hidden
           'now open the report
           DoCmd.OpenReport strDoc, acViewPreview, WhereCondition:=strWhere, OpenArgs:=strDescrip
        Next
     End With
    
    
        'Loop through the ItemsSelected in the list box.
        With Me.LstFunction
            For Each varItem In .ItemsSelected
                If Not IsNull(varItem) Then
                    'Build up the filter from the bound column (hidden).
                    strWhere = strWhere & strDelim & .ItemData(varItem) & strDelim & ","
                    'Build up the description from the text in the visible column. See note 2.
                    strDescrip = strDescrip & """" & .Column(1, varItem) & """, "
                End If
            Next
        End With
        
        'Remove trailing comma. Add field name, IN operator, and brackets.
        lngLen = Len(strWhere) - 1
        If lngLen > 0 Then
            strWhere = "[SubSubCategoryID] IN (" & Left$(strWhere, lngLen) & ")"
            lngLen = Len(strDescrip) - 2
            If lngLen > 0 Then
                strDescrip = "Function: " & Left$(strDescrip, lngLen)
            End If
        End If
        
        'Report will not filter if open, so close it. For Access 97, see note 3.
        If CurrentProject.AllReports(strDoc).IsLoaded Then
            DoCmd.Close acReport, strDoc
        End If
        
        'Omit the last argument for Access 2000 and earlier. See note 4.
        DoCmd.OpenReport strDoc, acViewPreview, WhereCondition:=strWhere, OpenArgs:=strDescrip
        DoCmd.SendObject acReport
        DoCmd.Close
    Exit_Handler:
        Exit Sub
    
    
    Err_Handler:
        If Err.Number <> 2501 Then  'Ignore "Report cancelled" error.
            MsgBox "Error " & Err.Number & " - " & Err.Description, , "cmdPreview_Click"
        End If
        Resume Exit_Handler
    End Sub
    
    
    Private Sub cmdExportExcel_Click()
    On Error GoTo Err_Handler
        'Purpose:  Open the report filtered to the items selected in the list box.
        'Author:   Allen J Browne, 2004.   http://allenbrowne.com
        Dim varItem As Variant      'Selected items
        Dim strWhere As String      'String to use as WhereCondition
        Dim strDescrip As String    'Description of WhereCondition
        Dim lngLen As Long          'Length of string
        Dim strDelim As String      'Delimiter for this field type.
        Dim strDoc As String        'Name of report to open.
        
        'strDelim = """"            'Delimiter appropriate to field type. See note 1.
         With Me.LstBusinessReport
            For Each varItem In .ItemsSelected
               strDoc = .Column(1, varItem) 'assumes list box has two columns, the first one holding the reportID is the bound one and hidden
           'now open the report
           DoCmd.OpenReport strDoc, acViewPreview, WhereCondition:=strWhere, OpenArgs:=strDescrip
        Next
     End With
    
    
        'Loop through the ItemsSelected in the list box.
        With Me.LstFunction
            For Each varItem In .ItemsSelected
                If Not IsNull(varItem) Then
                    'Build up the filter from the bound column (hidden).
                    strWhere = strWhere & strDelim & .ItemData(varItem) & strDelim & ","
                    'Build up the description from the text in the visible column. See note 2.
                    strDescrip = strDescrip & """" & .Column(1, varItem) & """, "
                End If
            Next
        End With
        
        'Remove trailing comma. Add field name, IN operator, and brackets.
        lngLen = Len(strWhere) - 1
        If lngLen > 0 Then
            strWhere = "[SubSubCategoryID] IN (" & Left$(strWhere, lngLen) & ")"
            lngLen = Len(strDescrip) - 2
            If lngLen > 0 Then
                strDescrip = "Function: " & Left$(strDescrip, lngLen)
            End If
        End If
        
        'Report will not filter if open, so close it. For Access 97, see note 3.
        If CurrentProject.AllReports(strDoc).IsLoaded Then
            DoCmd.Close acReport, strDoc
        End If
        
        'Omit the last argument for Access 2000 and earlier. See note 4.
        DoCmd.OpenReport strDoc, acViewPreview, WhereCondition:=strWhere, OpenArgs:=strDescrip
        DoCmd.OutputTo acOutputReport, , acFormatXLS
        DoCmd.Close
    Exit_Handler:
        Exit Sub
    
    
    Err_Handler:
        If Err.Number <> 2501 Then  'Ignore "Report cancelled" error.
            MsgBox "Error " & Err.Number & " - " & Err.Description, , "cmdPreview_Click"
        End If
        Resume Exit_Handler
    End Sub
    
    
    Private Sub cmdExportPDF_Click()
    On Error GoTo Err_Handler
        'Purpose:  Open the report filtered to the items selected in the list box.
        'Author:   Allen J Browne, 2004.   http://allenbrowne.com
        Dim varItem As Variant      'Selected items
        Dim strWhere As String      'String to use as WhereCondition
        Dim strDescrip As String    'Description of WhereCondition
        Dim lngLen As Long          'Length of string
        Dim strDelim As String      'Delimiter for this field type.
        Dim strDoc As String        'Name of report to open.
        
        'strDelim = """"            'Delimiter appropriate to field type. See note 1.
         With Me.LstBusinessReport
            For Each varItem In .ItemsSelected
               strDoc = .Column(1, varItem) 'assumes list box has two columns, the first one holding the reportID is the bound one and hidden
           'now open the report
           DoCmd.OpenReport strDoc, acViewPreview, WhereCondition:=strWhere, OpenArgs:=strDescrip
        Next
     End With
    
    
        'Loop through the ItemsSelected in the list box.
        With Me.LstFunction
            For Each varItem In .ItemsSelected
                If Not IsNull(varItem) Then
                    'Build up the filter from the bound column (hidden).
                    strWhere = strWhere & strDelim & .ItemData(varItem) & strDelim & ","
                    'Build up the description from the text in the visible column. See note 2.
                    strDescrip = strDescrip & """" & .Column(1, varItem) & """, "
                End If
            Next
        End With
        
        'Remove trailing comma. Add field name, IN operator, and brackets.
        lngLen = Len(strWhere) - 1
        If lngLen > 0 Then
            strWhere = "[SubSubCategoryID] IN (" & Left$(strWhere, lngLen) & ")"
            lngLen = Len(strDescrip) - 2
            If lngLen > 0 Then
                strDescrip = "Function: " & Left$(strDescrip, lngLen)
            End If
        End If
        
        'Report will not filter if open, so close it. For Access 97, see note 3.
        If CurrentProject.AllReports(strDoc).IsLoaded Then
            DoCmd.Close acReport, strDoc
        End If
        
        'Omit the last argument for Access 2000 and earlier. See note 4.
        DoCmd.OpenReport strDoc, acViewPreview, WhereCondition:=strWhere, OpenArgs:=strDescrip
        DoCmd.OutputTo acOutputReport, , acFormatPDF
        DoCmd.Close
    Exit_Handler:
        Exit Sub
    
    
    Err_Handler:
        If Err.Number <> 2501 Then  'Ignore "Report cancelled" error.
            MsgBox "Error " & Err.Number & " - " & Err.Description, , "cmdPreview_Click"
        End If
        Resume Exit_Handler
    End Sub
    
    
    Private Sub cmdPrintReport_Click()
     
    On Error GoTo Err_Handler
        'Purpose:  Open the report filtered to the items selected in the list box.
        'Author:   Allen J Browne, 2004.   http://allenbrowne.com
        Dim varItem As Variant      'Selected items
        Dim strWhere As String      'String to use as WhereCondition
        Dim strDescrip As String    'Description of WhereCondition
        Dim lngLen As Long          'Length of string
        Dim strDelim As String      'Delimiter for this field type.
        Dim strDoc As String        'Name of report to open.
        
        'strDelim = """"            'Delimiter appropriate to field type. See note 1.
         With Me.LstBusinessReport
            For Each varItem In .ItemsSelected
               strDoc = .Column(1, varItem) 'assumes list box has two columns, the first one holding the reportID is the bound one and hidden
           'now open the report
           DoCmd.OpenReport strDoc, acViewPreview, WhereCondition:=strWhere, OpenArgs:=strDescrip
           'DoCmd.PrintOut
        Next
     End With
    
    
        'Loop through the ItemsSelected in the list box.
        With Me.LstFunction
            For Each varItem In .ItemsSelected
                If Not IsNull(varItem) Then
                    'Build up the filter from the bound column (hidden).
                    strWhere = strWhere & strDelim & .ItemData(varItem) & strDelim & ","
                    'Build up the description from the text in the visible column. See note 2.
                    strDescrip = strDescrip & """" & .Column(1, varItem) & """, "
                End If
            Next
        End With
        
        'Remove trailing comma. Add field name, IN operator, and brackets.
        lngLen = Len(strWhere) - 1
        If lngLen > 0 Then
            strWhere = "[SubSubCategoryID] IN (" & Left$(strWhere, lngLen) & ")"
            lngLen = Len(strDescrip) - 2
            If lngLen > 0 Then
                strDescrip = "Function: " & Left$(strDescrip, lngLen)
            End If
        End If
        
        'Report will not filter if open, so close it. For Access 97, see note 3.
        If CurrentProject.AllReports(strDoc).IsLoaded Then
            DoCmd.Close acReport, strDoc
        End If
        
        'Omit the last argument for Access 2000 and earlier. See note 4.
        DoCmd.OpenReport strDoc, acViewPreview, WhereCondition:=strWhere, OpenArgs:=strDescrip
        'DoCmd.PrintOut acSelection
         DoCmd.RunCommand acCmdPrint
        DoCmd.Close
        
    Exit_Handler:
        Exit Sub
    
    
    Err_Handler:
        If Err.Number <> 2501 Then  'Ignore "Report cancelled" error.
            MsgBox "Error " & Err.Number & " - " & Err.Description, , "cmdPreview_Click"
        End If
        Resume Exit_Handler
    End Sub
    
    
    Private Sub CmdReport_Click()
     
    On Error GoTo Err_Handler
        'Purpose:  Open the report filtered to the items selected in the list box.
        'Author:   Allen J Browne, 2004.   http://allenbrowne.com
        Dim varItem As Variant      'Selected items
        Dim strWhere As String      'String to use as WhereCondition
        Dim strDescrip As String    'Description of WhereCondition
        Dim lngLen As Long          'Length of string
        Dim strDelim As String      'Delimiter for this field type.
        Dim strDoc As String        'Name of report to open.
        
        'strDelim = """"            'Delimiter appropriate to field type. See note 1.
         With Me.LstBusinessReport
            For Each varItem In .ItemsSelected
               strDoc = .Column(1, varItem) 'assumes list box has two columns, the first one holding the reportID is the bound one and hidden
           'now open the report
           DoCmd.OpenReport strDoc, acViewPreview, WhereCondition:=strWhere, OpenArgs:=strDescrip
        Next
     End With
    
    
        'Loop through the ItemsSelected in the list box.
        With Me.LstFunction
            For Each varItem In .ItemsSelected
                If Not IsNull(varItem) Then
                    'Build up the filter from the bound column (hidden).
                    strWhere = strWhere & strDelim & .ItemData(varItem) & strDelim & ","
                    'Build up the description from the text in the visible column. See note 2.
                    strDescrip = strDescrip & """" & .Column(1, varItem) & """, "
                End If
            Next
        End With
        
        'Remove trailing comma. Add field name, IN operator, and brackets.
        lngLen = Len(strWhere) - 1
        If lngLen > 0 Then
            strWhere = "[SubSubCategoryID] IN (" & Left$(strWhere, lngLen) & ")"
            lngLen = Len(strDescrip) - 2
            If lngLen > 0 Then
                strDescrip = "Function: " & Left$(strDescrip, lngLen)
            End If
        End If
        
        'Report will not filter if open, so close it. For Access 97, see note 3.
        If CurrentProject.AllReports(strDoc).IsLoaded Then
            DoCmd.Close acReport, strDoc
        End If
        
        'Omit the last argument for Access 2000 and earlier. See note 4.
        DoCmd.OpenReport strDoc, acViewPreview, WhereCondition:=strWhere, OpenArgs:=strDescrip
        
    Exit_Handler:
        Exit Sub
    
    
    Err_Handler:
        If Err.Number <> 2501 Then  'Ignore "Report cancelled" error.
            MsgBox "Error " & Err.Number & " - " & Err.Description, , "cmdPreview_Click"
        End If
        Resume Exit_Handler
     
    End Sub
    Please use # icon on toolbar when posting code snippets.
    Cross Posting: https://www.excelguru.ca/content.php?184
    Debugging Access: https://www.youtube.com/results?sear...bug+access+vba

  10. #10
    moke123's Avatar
    moke123 is offline Me.Dirty=True
    Windows 11 Office 365
    Join Date
    Oct 2012
    Posts
    1,251
    Now I see what you mean by repetitive.

    I'm a little lost by what your doing with Allen's code. If you want to slim things down make a public function with it in a standard module.

    I see you already use my getLBX function which does essentially the same thing as Allen's code.
    If this helped, please click the star * at the bottom left and add to my reputation- Thanks

  11. #11
    d9pierce1 is offline Expert
    Windows 10 Access 2019
    Join Date
    Jan 2012
    Location
    Oklahoma
    Posts
    655
    Hi Moke123
    Thank you for the input!
    To reference your question on Allens code, I first used it in a different db I built. It was all I could find at the time and it worked. Well after using the db for a while,
    I found that I needed some changes and so started over so to speak. I love your module and thank you for sharing with me. It works great, not real sure how but it
    really worked for this part of my project. It is similiar to Allens but to be honest, I really dont know or understand it enough to change it to a function and make that
    all work? Honestly, I really dont understand this all and I wish I did but not being a programmer, I struggle hard with these things. Enough babbling, I will give it a shot
    and see what happens. Will update if able to get this to work in a function!
    Thanks
    Dave

  12. #12
    d9pierce1 is offline Expert
    Windows 10 Access 2019
    Join Date
    Jan 2012
    Location
    Oklahoma
    Posts
    655
    Hi moke123
    Can I ask you some questions?

    First off I am just learning how to cut down on the repetitive code so bare with me pz.
    Is there a benefit to making this a public function instead of leaving it as a private sub and calling on it? I mean does it speed things up or ?
    I do use this same code in my other areas such as accounting and person reports in the same db. I could put this into a mod and call on it but if I want to use it for my
    other report forms then i would need to do some serious changes to it, Correct? What i mean is now allens code has my individual list boxes listed in it and that some how would have
    to change i believe.

    Such as your function, it doesn't specify a specific list box, it loops through them all if I am seeing it correctly? It does look like your function is doing somewhat the same as allens code without the
    report criteria? So with that said, if I am correct some modification to your function would not only satisfy the list boxes, but handle the report to open with criteria selected? And then it wouldn't
    need to call out listboxes by name? Am I on the correct path here?

    Thanks so much
    Dave

  13. #13
    moke123's Avatar
    moke123 is offline Me.Dirty=True
    Windows 11 Office 365
    Join Date
    Oct 2012
    Posts
    1,251
    Is there a benefit to making this a public function instead of leaving it as a private sub and calling on it?
    By making it public in a standard module you can call it from anywhere.

    i would need to do some serious changes to it, Correct?
    Not to my code but you need to use it differently. In your version of Allan's code your constructing the full where argument - "SomeField in (1,3,5,7,8) and your opening the report from within the code.

    My code only returns the values of the selected column - 1,3,5,7,8. You use my code in your open report method - docmd.openreport "Report1",,,"SomeField in(" & getLBX(me.SomeListbox) & ")"

    Such as your function, it doesn't specify a specific list box, it loops through them all if I am seeing it correctly?
    The listbox is the first argument you pass to my function.
    Code:
    Public Function getLBX(lbx As ListBox, Optional intColumn As Variant = 0, Optional Seperator As String = ",", _
                           Optional delim As Variant = Null) As String
    All the other arguments are optional with default values. you can set it to any column, use any character as a separator, and add any delimiter.

    Here's a sample with my function. Go down to the bottom and you can play with the arguments to see how they work.
    Attached Files Attached Files
    If this helped, please click the star * at the bottom left and add to my reputation- Thanks

  14. #14
    d9pierce1 is offline Expert
    Windows 10 Access 2019
    Join Date
    Jan 2012
    Location
    Oklahoma
    Posts
    655
    moke123
    Thank you so much for taking the time to assist me, that is awesome.
    I will study this and possibly will be able to understand it more than I do.
    Again,
    Thank you so mych
    Dave

  15. #15
    d9pierce1 is offline Expert
    Windows 10 Access 2019
    Join Date
    Jan 2012
    Location
    Oklahoma
    Posts
    655
    Hi moke123
    Thank you,
    I have played with this for about 5 hours now and finally got it to work!
    This eliminates a lot of code for sure! And will work in my other forms also!

    Code:
    Private Sub Command25_Click()
    Dim varItem As Variant
    Dim strDoc As String
    
    
       With Me.LstBusinessReport
            For Each varItem In .ItemsSelected
               strDoc = .Column(1, varItem) 'assumes list box has two columns, the first one holding the reportID is the bound one and hidden
        Next
        End With
    
    
    If Not IsNull(Me.LstFunction.Column(0)) Then
    DoCmd.OpenReport strDoc, acViewPreview, , "[SubSubCategoryID] in(" & getLBX(Me.LstFunction) & ")"
    Else
    DoCmd.OpenReport strDoc, acViewPreview
    End If
    End Sub
    Thank you,
    dave

    Marked as Solved

Page 1 of 2 12 LastLast
Please reply to this thread with any new information or opinions.

Similar Threads

  1. Replies: 5
    Last Post: 08-06-2015, 03:26 PM
  2. Replies: 1
    Last Post: 02-21-2015, 11:35 PM
  3. Replies: 15
    Last Post: 04-09-2014, 02:29 PM
  4. Hiding buttons on Print of Report
    By CS_10 in forum Reports
    Replies: 3
    Last Post: 04-08-2014, 07:52 AM
  5. Replies: 1
    Last Post: 12-03-2012, 03:15 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Other Forums: Microsoft Office Forums