View Single Post
  #2   Report Post  
Posted to microsoft.public.excel.programming
Dave Peterson[_5_] Dave Peterson[_5_] is offline
external usenet poster
 
Posts: 1,758
Default Combining multiple sheets onto one

Your code doesn't look that resource intensive.

But you do have a lot of selects in there. You can copy|Paste directly with
something like:


Option Explicit

Sub Build_Summary2()
'Now build summary sheet by copying in all the workstream sheets

Dim mySheetNames As Variant
Dim SummWks As Worksheet
Dim DestCell As Range
Dim RngToCopy As Range
Dim iCtr As Long

mySheetNames = Array("pmo", "bc", "csm", "otc", _
"ptp", "scm", "man", "cm", "ds")

Set SummWks = Sheets("Summary")

With SummWks
.Range("a1:bb5000").Clear
Set DestCell = .Range("a1")
End With

For iCtr = LBound(mySheetNames) To UBound(mySheetNames)
Application.StatusBar = "Processing: " _
& mySheetNames(iCtr) & " at: " & Now

With Worksheets(mySheetNames(iCtr))

If iCtr = LBound(mySheetNames) Then
.Rows(4).Copy _
Destination:=DestCell
Set DestCell = DestCell.Offset(1, 0)
End If

Set RngToCopy _
= .Range("a5", .Cells(.Rows.Count, "A").End(xlUp)).EntireRow

RngToCopy.Copy _
Destination:=DestCell

End With

With SummWks
Set DestCell = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0)
End With

Next iCtr

Application.StatusBar = False

End Sub

But I'm not sure it will help.

(I did change one thing that shouldn't matter much. Instead of always going to
Row 2000, I went to the last row that had something in it in column A.)


Steve Barber wrote:

I wrote the following code to combine multiple sheets - it worked fine, now,
however the machine hangs and I have to restart Excel, can anyone show more a
more elegant (less resource hungry) way of achieving my aim?

Many thanks in advance

******** Code Sample **********
sub Build_Summary()
'Now build summary sheet by copying in all the workstream sheets
Sheets("Summary").Select
Range("a1:bb5000").Select
Selection.Clear

Sheets("PMO").Select
Rows("4:2000").Select
Selection.Copy
Sheets("Summary").Select
Range("a1").Select
ActiveSheet.Paste

sheetname = "BC": GoSub copysheet
sheetname = "CSM": GoSub copysheet
sheetname = "OTC": GoSub copysheet
sheetname = "PTP": GoSub copysheet
sheetname = "SCM": GoSub copysheet
sheetname = "MAN": GoSub copysheet
sheetname = "CM": GoSub copysheet
sheetname = "DS": GoSub copysheet
GoTo finished2

copysheet:
Sheets(sheetname).Select
Rows("5:2000").Select
Selection.Copy
Sheets("Summary").Select
Range("A5").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Return
finished2:
End Sub


--

Dave Peterson