I have a macro that currently works for me (after much help from others in another forum) but I would like some help tweaking it.
Please note that the subtotal function excludes the first sheet because doing so isn't necessary and will cause excel to crash due to #of rows.
1. The data is split into worksheets by column A (Invoice #) but it isn't done in alphabetical order, even if the first sheet is in alphabetical order. How can I change that?
2. How can I save each tab as a separate Excel 2013 file without deleting it in the original sheet?
3. I have a print area set that includes all columns but I would like to auto detect how many pages are needed. The limit of rows I would like to have in one page is 75. For ex, an invoice with 230+ rows would require 4 sheets.
Sample Data
<colgroup><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col></colgroup><tbody>
</tbody>
Thanks in advance for your help.
Please note that the subtotal function excludes the first sheet because doing so isn't necessary and will cause excel to crash due to #of rows.
1. The data is split into worksheets by column A (Invoice #) but it isn't done in alphabetical order, even if the first sheet is in alphabetical order. How can I change that?
2. How can I save each tab as a separate Excel 2013 file without deleting it in the original sheet?
3. I have a print area set that includes all columns but I would like to auto detect how many pages are needed. The limit of rows I would like to have in one page is 75. For ex, an invoice with 230+ rows would require 4 sheets.
Sample Data
Invoice | Descr | Customer | Acctg Date | AP Unit | Voucher | Line | Ship To | Ult Use Code | Code | Vendor | Name | Invoice | GL Unit | Entity | Account | Dept | Project | Activity | Source Type | St | Taxable | PO No. | PO Unit | Amount | Tax | Percent | ID | Source Descr |
ABC-0000001357 | TX | 000000000000797 | 3/23/2017 | XXXXX | 00497649 | 1 | TX | 325784 | 12345 | ABCDEFG | 789000 | 9999 | AB000056 | FGHIJ | 987654 | NY | E | 20000XXXXX | 12345 | 3,962.00 | - | - | Non POVchr | |||||
ABC-0000001360 | CA | 000000000000821 | 3/29/2017 | XXXXX | 00498828 | 1 | CA | 1009091 | 12345 | ABCDEFG | 789000 | 9999 | AB000060 | FGHIJ | 987654 | CA | E | 20000XXXXX | 12345 | 3,300.00 | - | - | PO Vchr | |||||
ABC-0000001361 | CA | 000000000000850 | 3/31/2017 | XXXXX | 00499344 | 1 | CA | 325794 | 12345 | ABCDEFG | 789000 | 9999 | AB000048 | FGHIJ | 987654 | CA | E | 20000XXXXX | 12345 | 3,962.00 | - | - | PO Vchr | |||||
ABC-0000001362 | TX | 000000000002113 | 3/22/2017 | XXXXX | 00497420 | 12 | TX | 93186 | 12345 | ABCDEFG | 789500 | 9999 | YZ001932 | FGHIJ | 987654 | TX | T | 174.25 | - | - | Non POVchr | |||||||
ABC-0000001369 | AL | 000000000000475 | 3/21/2017 | XXXXX | 00497403 | 1 | AL | 17025 | 12345 | ABCDEFG | 789000 | 9999 | AB000024 | FGHIJ | 987654 | AL | E | 20000XXXXX | 12345 | 5,141.01 | - | - | PO Vchr | |||||
ABC-0000001369 | AL | 000000000000475 | 3/21/2017 | XXXXX | 00497403 | 2 | AL | 17025 | 12345 | ABCDEFG | 789000 | 9999 | AB000024 | FGHIJ | 987654 | AL | E | 20000XXXXX | 12345 | 752.40 | - | - | PO Vchr | |||||
ABC-0000001369 | AL | 000000000000475 | 3/21/2017 | XXXXX | 00497403 | 3 | AL | 17025 | 12345 | ABCDEFG | 789000 | 9999 | AB000024 | FGHIJ | 987654 | AL | E | 20000XXXXX | 12345 | 1,777.23 | - | - | PO Vchr | |||||
ABC-0000001369 | AL | 000000000000475 | 3/21/2017 | XXXXX | 00497403 | 4 | AL | 17025 | 12345 | ABCDEFG | 789000 | 9999 | AB000024 | FGHIJ | 987654 | AL | E | 20000XXXXX | 12345 | 2,322.10 | - | - | PO Vchr | |||||
ABC-0000001369 | AL | 000000000000475 | 3/21/2017 | XXXXX | 00497403 | 2 | AL | 17025 | 12345 | ABCDEFG | 789000 | 9999 | AB000024 | FGHIJ | 987658 | AL | E | 20000XXXXX | 12345 | 752.40 | - | - | PO Vchr | |||||
ABC-0000001369 | AL | 000000000000475 | 3/21/2017 | XXXXX | 00497403 | 3 | AL | 17025 | 12345 | ABCDEFG | 789000 | 9999 | AB000024 | FGHIJ | 987658 | AL | E | 20000XXXXX | 12345 | 1,777.23 | - | - | PO Vchr | |||||
ABC-0000001369 | AL | 000000000000475 | 3/21/2017 | XXXXX | 00497403 | 4 | AL | 17025 | 12345 | ABCDEFG | 789000 | 9999 | AB000024 | FGHIJ | 987658 | AL | E | 20000XXXXX | 12345 | 2,322.10 | - | - | PO Vchr | |||||
XYZ-0000013783 | TX | 000000000002014 | 3/24/2017 | XXXXX | 00497908 | 1 | TX | I17017 | 12345 | ABCDEFG | 789500 | 9999 | YZ002596 | FGHIJ | 987654 | PA | T | 20000XXXXX | 12345 | 8,712.00 | 522.72 | 6.00 | PO Vchr | |||||
XYZ-0000013783 | TX | 000000000002014 | 3/24/2017 | XXXXX | 00497908 | 2 | TX | I17017 | 12345 | ABCDEFG | 789500 | 9999 | YZ002596 | FGHIJ | 987654 | PA | T | 20000XXXXX | 12345 | 8,712.00 | 522.72 | 6.00 | PO Vchr | |||||
XYZ-0000013783 | TX | 000000000002014 | 3/24/2017 | XXXXX | 00497908 | 3 | TX | I17017 | 12345 | ABCDEFG | 789500 | 9999 | YZ002596 | FGHIJ | 987654 | PA | E | 20000XXXXX | 12345 | 2,178.00 | - | - | PO Vchr | |||||
XYZ-0000013783 | TX | 000000000002014 | 3/24/2017 | XXXXX | 00497908 | 4 | TX | I17017 | 12345 | ABCDEFG | 789500 | 9999 | YZ002596 | FGHIJ | 987654 | PA | E | 20000XXXXX | 12345 | 2,178.00 | - | - | PO Vchr | |||||
XYZ-0000013784 | TX | 000000000002014 | 3/30/2017 | XXXXX | 00498980 | 56 | TX | 93290 | 12345 | ABCDEFG | 789500 | 9999 | YZ002597 | FGHIJ | 987654 | PA | E | 44.17 | - | - | Non POVchr | |||||||
XYZ-0000013784 | AL | 000000000002014 | 3/21/2017 | ZZZZZ | 0 | 12345 | ABCDEFG | 789500 | 9999 | YZ002597 | FGHIJ | 987654 | PA | E | 1,200.00 | - | - | INV |
<colgroup><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col><col></colgroup><tbody>
</tbody>
Thanks in advance for your help.
Code:
Sub Invoice()
Dim ws As Worksheet, a, e, dic As Object
Cells.Select
With Selection.Font
.Name = "Arial Narrow"
.Size = 10
Rows("1:10000").RowHeight = 15
Columns("K:L").Select
Selection.Style = "Comma"
End With
ActiveSheet.Range("a1:W1").Select
Selection.Copy
On Error Resume Next
Application.ScreenUpdating = False
For Each ws In Worksheets
ws.Columns("A:W").Sort Key1:=ws.Columns("J"), Order1:=xlDescending, Key2:=ws.Columns("O"), Order2:=xlAscending
Next ws
ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll
Application.ScreenUpdating = True
Application.ScreenUpdating = False
Set dic = CreateObject("Scripting.Dictionary")
With Sheets("sheet1").Cells(1).CurrentRegion
.Parent.AutoFilterMode = False
a = .Columns(1).Offset(1).Resize(.Rows.Count - 1).Value
For Each e In a
If Not dic.exists(e) Then
dic(e) = Empty
If Not Evaluate("isref('" & e & "'!a1)") Then
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = e
End If
Sheets(e).Cells.Clear
.AutoFilter 1, e
.Copy Sheets(e).Cells(1)
With Sheets(e).Cells(1).CurrentRegion
.Subtotal GroupBy:=10, Function:=xlSum, TotalList:=Array(11, 12)
.Parent.Cells.ClearOutline
.Columns.AutoFit
.PageSetup.PrintTitleRows = "$1:$1"
If .Rows.Count > 75 Then
For i = 76 To .Rows.Count Step 75
.Parent.HPageBreaks.Add before:=.Rows(i)
Next
End If
With .Parent.PageSetup
.Orientation = xlLandscape
.FitToPagesWide = 1 '? ---- changed
.Zoom = False
End With
.AutoFilter
End With
Application.ScreenUpdating = True
End If
Next
End With
End Sub