Hi all, a mature newbie here trying to get my head around VBA. I would like to ay hi, and hope someone can help me please?
What I am trying to do is this:
I have a workbook with, for example, 6 worksheets. 3 worksheets are input dropdowns etc and are named input1, input2 and input3. The other 3 are output sheets and are named output1, output2 and output3.
Using an excellent existing piece of code that is online:
What I would like to do is get to a situation where the code ONLY looks and consolidates the 3 output worksheets and ignores the 3 input worksheets.
I have been trying to insert
If Exists
If Named
type statements into the code but it keeps falling over.
I have worked out how to manipulate the consolidated sheet headings by altering and adding to the
line.
Can anyone show me how to do this, or point me in the right direction, please?
Thanks for looking.
What I am trying to do is this:
I have a workbook with, for example, 6 worksheets. 3 worksheets are input dropdowns etc and are named input1, input2 and input3. The other 3 are output sheets and are named output1, output2 and output3.
Using an excellent existing piece of code that is online:
VBA Code:
Sub Consolidate_Data_From_Different_Sheets_Into_Single_Sheet()
'Procedure to Consolidate all sheets in a workbook
On Error GoTo IfError
'1. Variables declaration
Dim Sht As Worksheet, DstSht As Worksheet
Dim LstRow As Long, LstCol As Long, DstRow As Long
Dim i As Integer, EnRange As String
Dim SrcRng As Range
'2. Disable Screen Updating - stop screen flickering
' And Disable Events to avoid inturupted dialogs / popups
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
'3. Delete the Consolidate_Data WorkSheet if it exists
Application.DisplayAlerts = False
On Error Resume Next
ActiveWorkbook.Sheets("Consolidate_Data").Delete
Application.DisplayAlerts = True
'4. Add a new WorkSheet and name as 'Consolidate_Data'
With ActiveWorkbook
Set DstSht = .Sheets.Add(After:=.Sheets(.Sheets.Count))
DstSht.Name = "Consolidate_Data"
End With
'5. Loop through each WorkSheet in the workbook and copy the data to the 'Consolidate_Data' WorkSheet
For Each Sht In ActiveWorkbook.Worksheets
If Sht.Name <> DstSht.Name Then
'5.1: Find the last row on the 'Consolidate_Data' sheet
DstRow = fn_LastRow(DstSht)
'5.2: Find Input data range
LstRow = fn_LastRow(Sht)
LstCol = fn_LastColumn(Sht)
EnRange = Sht.Cells(LstRow, LstCol).Address
Set SrcRng = Sht.Range("A1:" & EnRange)
'5.3: Check whether there are enough rows in the 'Consolidate_Data' Worksheet
If DstRow + SrcRng.Rows.Count > DstSht.Rows.Count Then
MsgBox "There are not enough rows to place the data in the Consolidate_Data worksheet."
GoTo IfError
End If
'5.4: Copy data to the 'consolidated_data' WorkSheet
SrcRng.Copy Destination:=DstSht.Range("A" & DstRow + 1)
End If
Next
DstSht.Range("A1") = "You can place the heading in the first row"
IfError:
'6. Enable Screen Updating and Events
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
'In this example we are finding the last Row of specified Sheet
Function fn_LastRow(Sht As Worksheet)
Dim lastRow As Long
lastRow = Sht.Cells.SpecialCells(xlLastCell).Row
lRow = Sht.Cells.SpecialCells(xlLastCell).Row
Do While Application.CountA(Sht.Rows(lRow)) = 0 And lRow <> 1
lRow = lRow - 1
Loop
fn_LastRow = lRow
End Function
'In this example we are finding the last column of specified Sheet
Function fn_LastColumn(Sht As Worksheet)
Dim lastCol As Long
lastCol = Sht.Cells.SpecialCells(xlLastCell).Column
lCol = Sht.Cells.SpecialCells(xlLastCell).Column
Do While Application.CountA(Sht.Columns(lCol)) = 0 And lCol <> 1
lCol = lCol - 1
Loop
fn_LastColumn = lCol
End Function
What I would like to do is get to a situation where the code ONLY looks and consolidates the 3 output worksheets and ignores the 3 input worksheets.
I have been trying to insert
If Exists
If Named
type statements into the code but it keeps falling over.
I have worked out how to manipulate the consolidated sheet headings by altering and adding to the
VBA Code:
DstSht.Range("A1") = "You can place the heading in the first row"
line.
Can anyone show me how to do this, or point me in the right direction, please?
Thanks for looking.