Public Sub subSplitData()
Dim WsSource As Worksheet
Dim Ws As Worksheet
Dim rngData As Range
Dim i As Integer
Dim strWorksheet As String
Dim lngNextRow As Long
Dim rng As Range
Dim rngNames As Range
Dim intColumns As Integer
Dim strWorksheets As String
Dim WsExisting As Worksheet
Dim arrWorksheets() As String
Dim strMsg As String
ActiveWorkbook.Save
Set WsSource = Worksheets("Data")
Set rngNames = WsSource.Range("A1").CurrentRegion.Offset(1, 0).Resize(Worksheets("Data").Range("A1").CurrentRegion.Rows.Count - 1, _
Worksheets("Data").Range("A1").CurrentRegion.Columns.Count).Columns(9)
strWorksheets = fncGetWorksheetList(rngNames)
If MsgBox("Delete all sheets and start from scratch.", vbYesNo, "Question") = vbYes Then
Call subDeleteWorksheets(strWorksheets)
Else
If strWorksheets <> "" Then
strMsg = "Some worksheets already exist, do you want to delete the data from these?"
If MsgBox(strMsg, vbYesNo, "Question") = vbYes Then
Call subDeleteData(strWorksheets)
End If
End If
End If
Set rngData = WsSource.Range("A1").CurrentRegion.Resize(Worksheets("Data").Range("A1").CurrentRegion.Rows.Count, _
Worksheets("Data").Range("A1").CurrentRegion.Columns.Count - 1)
For Each rng In rngNames.Cells
strWorksheet = rng.Value
If Not fncDoesWorksheetExist(ActiveWorkbook, strWorksheet) Then
Set Ws = Worksheets.Add(After:=Sheets(Sheets.Count))
Ws.Name = strWorksheet
Ws.Range("A1:H1").Value = WsSource.Range("A1:H1").Value
Else
Set Ws = Worksheets(strWorksheet)
End If
If InStr(1, strWorksheets, Ws.Name, vbTextCompare) = 0 Then
strWorksheets = strWorksheets & " " & Ws.Name
End If
lngNextRow = Ws.Cells(Rows.Count, 1).End(xlUp).Row + 1
Ws.Range("A" & lngNextRow & ":H" & lngNextRow).Value = WsSource.Range("A" & rng.Row & ":H" & rng.Row).Value
Next rng
arrWorksheets = Split(strWorksheets, " ")
For i = 1 To UBound(arrWorksheets)
Set Ws = Worksheets(arrWorksheets(i))
With Ws.Range("A1").CurrentRegion
.Rows(1).Interior.Color = RGB(217, 217, 217)
.Rows(1).Font.Bold = True
.Font.Name = "Arial"
.Font.Size = 14
.EntireColumn.AutoFit
With .Borders
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = vbBlack
End With
End With
Next i
MsgBox "Processing Complete.", vbInformation, "Confirmation"
End Sub
Private Sub subDeleteData(strWorksheets As String)
Dim arrWorksheets() As String
Dim i As Integer
arrWorksheets = Split(strWorksheets, " ")
For i = 1 To UBound(arrWorksheets)
Worksheets(arrWorksheets(i)).Activate
Worksheets(arrWorksheets(i)).Range("A1").CurrentRegion.Offset(1, 0).EntireRow.Delete
Next i
End Sub
Private Function fncGetWorksheetList(rngNames As Range) As String
Dim strWorksheets As String
Dim Ws As Worksheet
Dim rng As Range
For Each rng In rngNames.Cells
If fncDoesWorksheetExist(ActiveWorkbook, rng.Value) Then
If InStr(1, strWorksheets, rng.Value, vbTextCompare) = 0 Then
strWorksheets = strWorksheets & " " & rng.Value
End If
End If
Next rng
fncGetWorksheetList = strWorksheets
End Function
Private Function fncDoesWorksheetExist(Wb As Workbook, strWorksheetName As String) As Boolean
Dim Ws As Worksheet
For Each Ws In Wb.Worksheets
If Ws.Name = strWorksheetName Then
fncDoesWorksheetExist = True
Exit Function
End If
Next Ws
End Function
Private Sub subDeleteWorksheets(strWorksheets As String)
Dim Ws As Worksheet
Dim Wb As Workbook
Dim arrWorksheets() As String
Dim i As Integer
Application.DisplayAlerts = False
arrWorksheets = Split(strWorksheets, " ")
For i = 1 To UBound(arrWorksheets)
Worksheets(arrWorksheets(i)).Delete
Next i
Application.DisplayAlerts = True
End Sub