We help IT Professionals succeed at work.

Excel VBA Selecting Range of Cells to bottom of Print Area Page

Medium Priority
Last Modified: 2012-08-14
I am trying to create an invoice in Excel. I have a precreated template on a sheet. The macro cleans up the information from a report that is exported from another software. It always comes out formatted the same(column-wise). As it stands now, It creates the bottom section of the invoice, then selections the used range for the cells on the bottom half then puts borders around them. What I am unsure on how to do is select only the first page border each section, then move to the second page and paste the header of the invoice again on the second page, then border the sections of the data again. To start the macro, you run the Create Invoice macro. If you have any questions, please let me know.

Any help is much appreciated. I'm attaching the sheet with the VB code in it. Feel free to critique this also. :)
Watch Question

Project Engineer, Electrical
Well, I can answer half of your question.  To repeat you header, say rows 1:6, in page setup set the "repeat rows at top" to 1:6.  You may want to move the date down 1 row, or shrink the image and use rows 1:5.

As for putting a border around the data thats on 1 page, even if it breaks onto a 2nd page, I'm not sure.  (Rewording if someone else has trouble understanding what you were asking for).
RyanProject Engineer, Electrical

Found the answer to the other half.  Conditional format.  Currently, I'm seeing 46 rows on a page, with 6rows as header (so 40 rows of actual data_. So you want a bottom border on every data thats a multiple of 40 + 6, =MOD(ROW()-6,40)=0

Same thing for the top border on the next line, =MOD(ROW()-5,40)=0


That worked great for the repeating header. I actually looked  at that section, but wasnt quite sure how to set it up.

As far as the page break borders. I used the below code. Since it was just needed on the bottom of the invoice data section, i figured out how to find the page breaks.

Private Sub PageBreakBorders()
Dim pb As HPageBreak
For Each pb In ActiveSheet.HPageBreaks
    LastRow = pb.Location.Offset(-1, 0).Row
    Range("B" & LastRow, "H" & LastRow).Select
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With

End Sub

Explore More ContentExplore courses, solutions, and other research materials related to this topic.