need help in splitting macro

kavin n

New Member
Joined
May 12, 2016
Messages
1
I have the following code. the current macro generate separate workbooks based on unique values of a column of only one sheet. but i want it to do traverse across all the sheets and consolidate it. for ex: if the record "India" is present on all the sheets, the workbook "India" should have all the records. can anyone please help me out. its really urgent. thanks in advance.

Code:
Dim My_Range As Range
Dim FieldNum As Long
Dim FileExtStr As String
Dim FileFormatNum As Long
Dim CalcMode As Long
Dim ViewMode As Long
Dim ws2     As Worksheet
Dim MyPath  As String
Dim Lrow    As Long
Dim cell    As Range
Dim CCount  As Long
Dim WSNew   As Worksheet
Dim ErrNum  As Long
Dim p       As Long
Dim q       As Long
Dim last    As Long



p = Worksheets.Count
For q = 1 To p

    last = Sheets(q).Cells(Rows.Count, "B").End(xlUp).Row
    Set My_Range = Sheets(q).Range("A1:E" & last)

    If ActiveWorkbook.ProtectStructure = True Or _
       My_Range.Parent.ProtectContents = True Then
        MsgBox "Sorry, not working when the workbook or worksheet is protected", _
               vbOKOnly, "Copy to new workbook"
        Exit Sub
    End If



    FieldNum = 2        'specify the column on which u want to filter


    My_Range.Parent.AutoFilterMode = False


    'You use Excel 2007-2013
    If ActiveWorkbook.FileFormat = 56 Then
        FileExtStr = ".xls": FileFormatNum = 56
    Else
        FileExtStr = ".xlsx": FileFormatNum = 51
    End If




    'Delete the sheet RDBLogSheet if it exists
    On Error Resume Next
    Application.DisplayAlerts = False
    Sheets("LogSheet").Delete
    Application.DisplayAlerts = True
    On Error GoTo 0


    ' Add worksheet to copy/Paste the unique list
    Set ws2 = Worksheets.Add(After:=Sheets(Sheets.Count))
    ws2.Name = "Logsheet"




    With ws2
    'first we copy the Unique data from the filter field to ws2
        My_Range.Columns(FieldNum).AdvancedFilter _
                Action:=xlFilterCopy, _
                CopyToRange:=.Range("A3"), Unique:=True


    'loop through the unique list in ws2 and filter/copy to a new sheet
        Lrow = .Cells(Rows.Count, "A").End(xlUp).Row
        For Each cell In .Range("A4:A" & Lrow)


    'Filter the range
            My_Range.AutoFilter Field:=FieldNum, Criteria1:="=" & _
                                                            Replace(Replace(Replace(cell.Value, "~", "~~"), "*", "~*"), "?", "~?")


    'Check if there are no more then 8192 areas(limit of areas)
            CCount = 0
            On Error Resume Next
            CCount = My_Range.Columns(1).SpecialCells(xlCellTypeVisible) _
                     .Areas(1).Cells.Count
            On Error GoTo 0
            If CCount = 0 Then
                MsgBox "There are more than 8192 areas for the value : " & cell.Value _
                       & vbNewLine & "It is not possible to copy the visible data." _
                       & vbNewLine & "Tip: Sort your data before you use this macro.", _
                       vbOKOnly, "Split in worksheets"
            Else
    'Add new workbook with one sheet
                Set WSNew = Workbooks.Add(xlWBATWorksheet).Worksheets(1)


    'Copy/paste the visible data to the new workbook
                My_Range.SpecialCells(xlCellTypeVisible).Copy
                With WSNew.Range("A1")
    ' Paste:=8 will copy the columnwidth in Excel 2000 and higher
    ' Remove this line if you use Excel 97
                    .PasteSpecial Paste:=8
                    .PasteSpecial xlPasteValues
                    .PasteSpecial xlPasteFormats
                    Application.CutCopyMode = False
                    .Select
                End With


    'Save the file in the new folder and close it
                On Error Resume Next
                WSNew.Parent.SaveAs cell.Value & FileExtStr, FileFormatNum
                If Err.Number > 0 Then
                    Err.Clear
                    ErrNum = ErrNum + 1


                    WSNew.Parent.SaveAs "Error_" & Format(ErrNum, "0000") & FileExtStr, FileFormatNum


                    .Cells(cell.Row, "B").Formula = "=Hyperlink(""" & "Error_" & Format(ErrNum, "0000") & FileExtStr & """)"


                    .Cells(cell.Row, "A").Interior.Color = vbRed
                Else
                    .Cells(cell.Row, "B").Formula = _
                    "=Hyperlink(""" & cell.Value & FileExtStr & """)"
                End If


                WSNew.Parent.Close False
                On Error GoTo 0
            End If

            My_Range.AutoFilter Field:=FieldNum


        Next cell
        .Cells(1, "A").Value = "Red cell: can't use the Unique name as file name"
        .Cells(1, "B").Value = "Created Files (Click on the link to open a file)"
        .Cells(3, "A").Value = "Unique Values"
        .Cells(3, "B").Value = "Full Path and File name"
        .Cells(3, "A").Font.Bold = True
        .Cells(3, "B").Font.Bold = True
        .Columns("A:B").AutoFit


    End With


    My_Range.Parent.AutoFilterMode = False


    If ErrNum > 0 Then
        MsgBox "Rename every WorkSheet name that start with ""Error_"" manually" _
               & vbNewLine & "There are characters in the name that are not allowed" _
               & vbNewLine & "in a sheet name or the worksheet already exist."
    End If


Next q
End Sub


Function LastRow(sh As Worksheet)
    On Error Resume Next
    LastRow = sh.Cells.Find(What:="*", _
                            After:=sh.Range("A1"), _
                            Lookat:=xlPart, _
                            LookIn:=xlValues, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlPrevious, _
                            MatchCase:=False).Row
    On Error GoTo 0
End Function
 
Last edited by a moderator:

Excel Facts

How to show all formulas in Excel?
Press Ctrl+` to show all formulas. Press it again to toggle back to numbers. The grave accent is often under the tilde on US keyboards.

Forum statistics

Threads
1,215,433
Messages
6,124,863
Members
449,195
Latest member
MoonDancer

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top