Copy and Save in specific way

K

K

A B C D E….col
Chrg App Total Amt Name…..headings
LA1 F01 7780 2190 DAVID
LA1 F21 7781 2191 DAVID
LA1 G61 7782 2192 DAVID
D35 G83 7783 2193 JOHN
D35 G87 7784 2194 JOHN
D35 G87 7785 2195 JOHN
D31 G87 7786 2196 ALI
D31 LC1 7787 2197 ALI
D31 LE1 7788 2198 ALI
G68 G68 7789 2199 STEVE
G68 G70 7790 2200 STEVE
G68 NA1 7791 2201 ROB
G68 PA1 7792 2202 ROB


I have three sheets in workbook with the names "MAIN" , "DATA" and
"TEMPLATE". In sheet "DATA" I have above data. In column A of sheet
"MAIN" I have data (see below)

A….col
Chrg….heading
LA1
D31
MC3
G68
F23

I want macro something like (see below)

1 - check column A values of sheet "MAIN" in column A of sheet "DATA"
2 - if values exist in sheet "DATA" then copy sheet "TEMPLATE" into
new workbook
3 - name new workbook with the unique value in column E of sheet
"DATA" which will be in same row of existing values
4 - create tabs in new workbook and give them name of column B values
of sheet "DATA" which will also in same row of existing values
5 - put column C and D figures of sheet "DATA" in cells A1 and B1 of
new created tabs
6 - save new create workbook on path "C:\Records"
7 - next until there is no value left in column A of sheet "MAIN"

(bit more detail given below for more understading)

1 - check cell A1 value of sheet "MAIN" (which is "LA1") in column A
of sheet "DATA"
2 - if "LA1" exists in column A of sheet "DATA" then copy sheet
"TEMPLATE" into new workbook
3 - name new workbook with the unique value in column E of sheet
"DATA" coming in same row of value "LA1" (which is "DAVID")
4 - create tabs in new workbook and give them name of column B value
of sheet "DATA" which will also in same row of value "LA1" (which will
be "F01" , "F21 and "G61")
5 - put column C and D figures of sheet "DATA" which are in same row
of values "F01" , "F21" and "G61" in cells A1 and B1 of new created
tabs.
6 - save new create workbook on path "C:\Records"
7 - next until there is no value left in column A of sheet "MAIN"

I'll be very thankful to the friend who can help on this
 
P

Patrick Molloy

This isn't greatly elegent, but should get you started ok...paste the code
into a new module

ALT+F11 opens the VBA editor, the INSERT/MODULE from the menu

Option Explicit

Dim wb As Workbook
Dim ws As Worksheet

Dim source As Range
Const TARGETFOLDER As String = "C:\Records\"
Sub Main()
Dim rw As Long
Set source = ThisWorkbook.Worksheets("data").Range("A:A")
rw = 2


With ThisWorkbook.Worksheets("Main")
Do Until .Cells(rw, 1) = ""

If MatchedItem(.Cells(rw, 1)) Then

Set wb = GetWB(.Cells(rw, "E").Value)
Set ws = GetWS(.Cells(rw, "B").Value)

ws.Cells(ws.Rows.Count, 1).End(xlUp).Offset(1).Resize(1,
5).Value = _
.Cells(rw, 1).Resize(, 5).Value

wb.Close True
End If

rw = rw + 1
Loop
End With
End Sub

Function MatchedItem(Chrg As String) As Boolean
Dim rec As Long
On Error Resume Next
rec = WorksheetFunction.Match(Chrg, source, False)
MatchedItem = (rec <> 0)
On Error GoTo 0
End Function
Function GetWB(wbName As String) As Workbook
On Error Resume Next
Set wb = Workbooks.Open(TARGETFOLDER & wbName & ".xls")
If Err.Number <> 0 Then
Err.Clear
Set wb = Workbooks.Add(1)
wb.SaveAs TARGETFOLDER & wbName
'ThisWorkbook.Worksheets("Template").Copy wb.Worksheets(1)

End If
Set GetWB = wb

End Function
Function GetWS(wsName As String) As Worksheet
On Error Resume Next
Set ws = wb.Worksheets(wsName)
If Err.Number <> 0 Then
Err.Clear
On Error GoTo 0
ThisWorkbook.Worksheets("Template").Copy wb.Worksheets(1)
wb.Worksheets(1).Name = wsName
Set ws = wb.Worksheets(wsName)
End If
Set GetWS = ws
End Function
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top