I am trying to copy tables from an Access database to an Excel sheet named "ALL". The sheet remains blank.
The data is being appended in a sheet named "count" where there is a pivot table.
I spent three days exploring this but didn't find the solution.
' This function is used to calculate the number of rows
Function lastrow() As Long
Dim ix As Long
ix = ActiveSheet.UsedRange.row - 1 + ActiveSheet.UsedRange.Rows.count
lastrow = ix
End Function
Sub Macro1()
'
' Macro1 Macro
' change the path where you want to save the workbooks
Dim Path As String
Path = ThisWorkbook.Path & "\"
Dim main_w As String
Dim data_file As String
Dim new_wb As String
Dim created As Integer
Dim dept As Range
Dim adviser As Range
Dim MJRL_COLN_NUM As Integer
Dim Counter As Integer
Dim rw As Range
Dim curCell As Range
Dim Cell As Range
Dim nextCell As Range
'Path = "U:\Macros\Adviser Macro\"
main_w = ThisWorkbook.Name
data_file = Workbooks.Open(Path + "data_file.xls").Name
created = 1
For Each dept In Columns(1).Cells
If (dept.Text = "") Then GoTo 1
' MsgBox (dept.Text)
If (created = 1) Then new_wb = Workbooks.Add.Name
Windows(main_w).Activate 'activate the workbook
Sheets("Sheet1").Select
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=60, Criteria1:=dept.Text
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
created = 0
If (ActiveWindow.RangeSelection.Rows.count < 4000) Then
Windows(new_wb).Activate
ActiveSheet.Name = "ALL"
ActiveSheet.Paste
Cells.Select
Selection.RowHeight = 12.75
Cells.EntireColumn.AutoFit
'sort records by dept, then by adv_name, then by id
ActiveSheet.Range("A2").Sort Key1:=ActiveSheet.Range("BH1"), _
Key2:=ActiveSheet.Range("BI1"), _
Key3:=ActiveSheet.Range("C1"), _
Header:=xlYes
'''''''''''''''''''''''''''''''''''''''''''
Windows(data_file).Activate
For Each adviser In Columns(2).Cells
If (adviser.Text = "") Then GoTo 2
'MsgBox adviser.Text
Windows(new_wb).Activate
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=61, Criteria1:=adviser.Text
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
If (ActiveWindow.RangeSelection.Rows.count < 1500) Then
Sheets.Add
ActiveSheet.Name = adviser.Text
ActiveSheet.Paste
'Sort the records according to major, class, then ID
ActiveSheet.Range("A2").Sort Key1:=ActiveSheet.Range("BH1"), _
Key2:=ActiveSheet.Range("BI1"), _
Key3:=ActiveSheet.Range("C1"), _
Header:=xlYes
'place the neccessary borders (seperators)
'31 is the number of the Major_code column
MJRL_COLN_NUM = 31
Counter = 2
For Each rw In ActiveSheet.Rows
Set curCell = ActiveSheet.Cells(Counter, MJRL_COLN_NUM)
If (curCell.Value = "") Then GoTo 3
Set nextCell = ActiveSheet.Cells(Counter + 1, MJRL_COLN_NUM)
If curCell.Value <> nextCell.Value Then
'add a line border*************************
Set Cell = ActiveSheet.Cells(Counter, 1)
Range(Cell, Cell.End(xlToRight)).Borders(xlEdgeBottom).Weight = xlMedium
End If
Counter = Counter + 1
Next
3: Cells.Select
Selection.RowHeight = 12.75
Cells.EntireColumn.AutoFit
Range("A1").Select
ActiveWorkbook.Sheets("ALL").Activate
End If
Next
2:
ActiveWorkbook.Sheets("ALL").Activate
Cells.Select
Selection.AutoFilter
Range("A1").Select
' This sub will add the sheet Count to each workbook it will simply copy paste from
' the pivot table of the adviser distribution
Dim rngend As Long
Dim n As Long
Dim row As Integer
Dim row_total As Integer
Dim str As String
n = 3
' Activating the count sheet
Windows("adviser counts (1 & 2).xls").Activate
Sheets("Sheet3").Select
' Selecting the Department Column
ActiveSheet.Cells(3, 1).Select
rngend = lastrow() - 1
Do While n < rngend
If ActiveCell.Value = dept.Text Then
row = n
End If
If ActiveCell.Value = dept.Text & " Total" Then
row_total = n
'If ActiveCell.Value = "UPP Total" Then
' MsgBox row_total
'End If
End If
'MsgBox row_total
n = n + 1
ActiveCell.Offset(1, 0).Select
Loop
ActiveSheet.Rows("1:2").Select
Selection.Copy
' need to change to appropriate files
Windows(new_wb).Activate
Dim A2 As Integer
A2 = 20
For A2 = 0 To A2 Step 1
If SheetExists("Sheet:" & A2) Then
Sheets("Sheet:" & A2).Select
Exit For
End If
Next
ActiveSheet.Cells(1, 1).Select
ActiveSheet.Paste
Windows("adviser counts (1 & 2).xls").Activate
Sheets("Sheet3").Select
ActiveSheet.Rows(row & ":" & row_total).Select
Selection.Copy
Windows(new_wb).Activate
Dim A1 As Integer
A1 = 20
For A1 = 0 To A1 Step 1
If SheetExists("Sheet:" & A2) Then
Sheets("Sheet:" & A2).Select
Exit For
End If
Next
ActiveSheet.Name = "count"
ActiveSheet.Cells(3, 1).Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Sheets("count").Select
Sheets("count").Move Before:=Sheets(2)
Sheets("ALL").Select
Sheets("ALL").Move Before:=Sheets(1)
ActiveWorkbook.SaveAs (Path & dept.Text)
ActiveWorkbook.Close
created = 1
End If
Windows(main_w).Activate
Next
1:
Windows(data_file).Close
'
End Sub
Function SheetExists(sheetName As String) As Boolean
Dim wk As Worksheet
On Error Resume Next
Set wk = ActiveWorkbook.Sheets(sheetName)
SheetExists = Not (wk Is Nothing)
Set wk = Nothing
On Error GoTo 0
End Function
I expect the output of all sheets to appear in sheet "ALL" and counts sheet to contain only its pivot table.