Results 1 to 4 of 4

Thread: Solved: VBA code to merge Worksheets Of Up To 1 Million Records In Ex. 2007

  1. #1
    VBAX Newbie
    Joined
    Mar 2008
    Posts
    1
    Location

    Solved: VBA code to merge Worksheets Of Up To 1 Million Records In Ex. 2007

    This is a nice piece of VBA code which adds separate worksheets onto the bottom of each other as long as they have the same field structure. I have tested this and it works fine in Excel 2003. However, when you have large worksheets ie. over 65536 records then the files are naturally split into different sheets. With Excel 2007 having a record capacity of 1 million records I have been trying to adapt the VBA to allow the addition of up to 1 million records to a worksheet. Obviously I have tried changing the number of records in the code but this causes the VBA to crash as more adaptations are needed which I can't figure out as I'm very new to VBA. Can anyone help??





     
    Sub CopyFromWorksheets() 
     Dim wrk As Workbook 'Workbook object - Always good to work with object variables
     Dim sht As Worksheet 'Object for handling worksheets in loop
     Dim trg As Worksheet 'Master Worksheet
     Dim rng As Range 'Range object
     Dim colCount As Integer 'Column count in tables in the worksheets
     
     Set wrk = ActiveWorkbook 'Working in active workbook
     
     For Each sht In wrk.Worksheets 
         If sht.Name = "Master" Then 
             MsgBox "There is a worksheet called as 'Master'." & vbCrLf & _ 
             "Please remove or rename this worksheet since 'Master' would be" & _ 
             "the name of the result worksheet of this process.", vbOKOnly + vbExclamation, "Error" 
             Exit Sub 
         End If 
     Next sht 
     
      'We don't want screen updating
     Application.ScreenUpdating = False 
     
      'Add new worksheet as the last worksheet
     Set trg = wrk.Worksheets.Add(After:=wrk.Worksheets(wrk.Worksheets.Count)) 
      'Rename the new worksheet
     trg.Name = "Master" 
      'Get column headers from the first worksheet
      'Column count first
     Set sht = wrk.Worksheets(1) 
     colCount = sht.Cells(1, 255).End(xlToLeft).Column 
      'Now retrieve headers, no copy&paste needed
     With trg.Cells(1, 1).Resize(1, colCount) 
         .Value = sht.Cells(1, 1).Resize(1, colCount).Value 
          'Set font as bold
         .Font.Bold = True 
     End With 
     
      'We can start loop
     For Each sht In wrk.Worksheets 
          'If worksheet in loop is the last one, stop execution (it is Master worksheet)
         If sht.Index = wrk.Worksheets.Count Then 
             Exit For 
         End If 
          'Data range in worksheet - starts from second row as first rows are the header rows in all worksheets
         Set rng = sht.Range(sht.Cells(2, 1), sht.Cells(65536, 1).End(xlUp).Resize(, colCount)) 
          'Put data into the Master worksheet
         trg.Cells(65536, 1).End(xlUp).Offset(1).Resize(rng.Rows.Count, rng.Columns.Count).Value = rng.Value 
     Next sht 
      'Fit the columns in Master worksheet
     trg.Columns.AutoFit 
     
      'Screen updating should be activated
     Application.ScreenUpdating = True 
    End Sub 


    Also found at this link ww... vbaexpress.com/kb/getarticle.php?kb_id=773

  2. #2
    Administrator
    VP-Knowledge Base
    VBAX Grand Master mdmackillop's Avatar
    Joined
    May 2004
    Location
    Scotland
    Posts
    14,476
    Location
    Try changing
    255 to Columns.Count
    65536 to Rows.Count
    MVP (Excel 2008-2010)

    Post a workbook with sample data and layout if you want a quicker solution.


    To help indent your macros try Smart Indent

    Please remember to mark threads 'Solved'

  3. #3
    Have you tried the new CountLarge Property in 2007, when referring to Row counts greater than 65536?

  4. #4
    This code works really great it solved my problems...
    "you know an except is coming",
    it does not bring any font or interior cell colors when it merges the worksheets.

    How can the font and interior colors be added to this merge? I am out of ideas...

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •