I've got a database with a long list of names, and unique values associated with the names. What I want to do is create one worksheet for each individual, and then copy only their data to a specified range in their worksheet, then proceed to the next individual, copy their data to their worksheet etc.

This: http://tinyurl.com/mmhvmkz is a link to an example worksheet (in google docs form, note - I am actually using Excel 2010, not google docs).

I've been able to create all the worksheets through using the following code in a new sheet I called "Employee". All I did to this sheet was remove the duplicate name values so I could have a list of all the names for the worksheets.

Any help is much appreciated. Thanks in advance.


    Sub CreateSheetsFromAList()
    Dim nameSource      As String 'sheet name where to read names
    Dim nameColumn      As String 'column where the names are located
    Dim nameStartRow    As Long   'row from where name starts
     
    Dim nameEndRow      As Long   'row where name ends
    Dim employeeName    As String 'employee name
     
    Dim newSheet        As Worksheet
     
    nameSource = "Employee"
    nameColumn = "A"
    nameStartRow = 1

     
    'find the last cell in use
    nameEndRow = Sheets(nameSource).Cells(Rows.Count, nameColumn).End(xlUp).Row
     
    'loop till last row
    Do While (nameStartRow <= nameEndRow)
        'get the name
        employeeName = Sheets(nameSource).Cells(nameStartRow, nameColumn)
         
        'remove any white space
        employeeName = Trim(employeeName)
         
        ' if name is not equal to ""
        If (employeeName <> vbNullString) Then
             
            On Error Resume Next 'do not throw error
            Err.Clear 'clear any existing error
             
            'if sheet name is not present this will cause error that we are going to leverage
            Sheets(employeeName).Name = employeeName
             
            If (Err.Number > 0) Then
                'sheet was not there, so it create error, so we can create this sheet
                Err.Clear
                On Error GoTo -1 'disable exception so to reuse in loop
                 
                'add new sheet
                Set newSheet = Sheets.Add(After:=Sheets(Sheets.Count))
                 
                'rename sheet
                newSheet.Name = employeeName
           
                 
                'paste training material
                Sheets(employeeName).Cells(1, "A").PasteSpecial
                Application.CutCopyMode = False
            End If
        End If
        nameStartRow = nameStartRow + 1 'increment row
    Loop
    End Sub