• Hi All

    Please note that at the Chandoo.org Forums there is Zero Tolerance to Spam

    Post Spam and you Will Be Deleted as a User

    Hui...

  • When starting a new post, to receive a quicker and more targeted answer, Please include a sample file in the initial post.

VBA macro needed to filter, cut, paste rows into new workbook

rahilamar

New Member
Could you please help for the Macro, which filter, cut and paste data into a new workbooks. But it also filter only those code which defined by me. i.e. 7012, 7024, 7014, and automatically saves the workbook with same id.


Dealer_Code MOBILE IMSI CUSTOMERNAME DATE SALE DATE

7000 mobile 1 2215006009 cust1 NA 07/01/2011

7012 mobile 1 2215005730 cust1 NA 07/04/2011

7014 mobile 1 2215008220 cust1 NA 07/04/2011

7015 mobile 1 2215008229 cust1 NA 07/05/2011

7024 mobile 1 2215008228 cust1 NA 07/06/2011

7047 mobile 1 2215009179 cust1 NA 07/07/2011
 
Very much Thankful for your help. I got what i was looking for from the provided link, however, would require one more help by adding prompt in below code. as i am new in VBA.


1- Locate file.

2- Prompt me for path for saving file.

3- Prompt me for Input Field (Numeric Value) i.e. 1

4- Prompt me for Input Range (Alphabetic+Numeric) i.e. A1


and start Creating Workbooks but only for look for those values which have been defined in MACRO script. i.e: 7000 7012 7013 7014 7015 7016 7017 7018


Actually, I have this macro made by someone but he has password protected his sheet for further use. if you allow me i can send you the sheet via email or help me on it. I 'll be remain thankful to you.


'Sub Copy_To_Worksheets_2()

'Note: This macro use the function LastRow and SheetExists

Dim My_Range As Range

Dim FieldNum As Long

Dim CalcMode As Long

Dim ViewMode As Long

Dim ws2 As Worksheet

Dim Lrow As Long

Dim cell As Range

Dim CCount As Long

Dim WSNew As Worksheet

Dim ErrNum As Long

Dim DestRange As Range

Dim Lr As Long


'Set filter range on ActiveSheet: A11 is the top left cell of your filter range

'and the header of the first column, D is the last column in the filter range.

'You can also add the sheet name to the code like this :

'Worksheets("Sheet1").Range("A11:D" & LastRow(Worksheets("Sheet1")))

'No need that the sheet is active then when you run the macro when you use this.

Set My_Range = Range("A11:D" & LastRow(ActiveSheet))

My_Range.Parent.Select


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 worksheet"

Exit Sub

End If


'This example filters on the first column in the range(change the field if needed)

'In this case the range starts in A so Field:=1 is column A, 2 = column B, ......

FieldNum = 1


'Turn off AutoFilter

My_Range.Parent.AutoFilterMode = False


'Change ScreenUpdating, Calculation, EnableEvents, ....

With Application

CalcMode = .Calculation

.Calculation = xlCalculationManual

.ScreenUpdating = False

.EnableEvents = False

End With

ViewMode = ActiveWindow.View

ActiveWindow.View = xlNormalView

ActiveSheet.DisplayPageBreaks = False


'Add a worksheet to copy the a unique list and add the CriteriaRange

Set ws2 = Worksheets.Add


With ws2

'first we copy the Unique data from the filter field to ws2

My_Range.Columns(FieldNum).AdvancedFilter _

Action:=xlFilterCopy, _

CopyToRange:=.Range("A1"), 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("A2:A" & Lrow)

My_Range.Parent.Select

'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 a new worksheet or set a reference to a existing sheet

If SheetExists(cell.Text) = False Then

Set WSNew = Worksheets.Add(After:=Sheets(Sheets.Count))

On Error Resume Next

WSNew.Name = cell.Value

If Err.Number > 0 Then

ErrNum = ErrNum + 1

WSNew.Name = "Error_" & Format(ErrNum, "0000")

Err.Clear

End If

On Error GoTo 0

Set DestRange = WSNew.Range("A1")

Else

Set WSNew = Sheets(cell.Text)

Lr = LastRow(WSNew)

Set DestRange = WSNew.Range("A" & Lr + 1)

End If


'Copy the visible data to the worksheet

My_Range.SpecialCells(xlCellTypeVisible).Copy

With DestRange

.Parent.Select

' 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

End If


' Delete the header row if you copy to a existing worksheet

If Lr > 1 Then WSNew.Range("A" & Lr + 1).EntireRow.Delete


'Show all data in the range

My_Range.AutoFilter Field:=FieldNum


Next cell


'Delete the ws2 sheet

On Error Resume Next

Application.DisplayAlerts = False

.Delete

Application.DisplayAlerts = True

On Error GoTo 0


End With


'Turn off AutoFilter

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

'Restore ScreenUpdating, Calculation, EnableEvents, ....

My_Range.Parent.Select

ActiveWindow.View = ViewMode

With Application

.ScreenUpdating = True
r />.EnableEvents = True

.Calculation = CalcMode

End With

End Sub'
 
If the worksheet was unprotected, would that solve some of the problem?


Protection passwords are easily removed:

http://www.mcgimpsey.com/excel/removepwords.html
 
Wait, how did that happen? You just posted the macro yesterday. To just copy/paste things, you shouldn't need to access the VB of another file. Worst case, you have the code in one workbook, and then have it run on the other workbook (the one with protected VB).
 
Back
Top