Option Explicit
Dim varNSplitedRows, varNColumns, varNRows, varNLoop As Long
Dim varWorksheetName, varTempWorksheet, varLocation, varFileName, _
varFileExists, varMessage As String
Sub SplitToWorkbooks()
Application.ScreenUpdating = False
varNSplitedRows = 500
varWorksheetName = ActiveSheet.Name
varNColumns = Sheets(varWorksheetName). _
Cells(1, Columns.Count).End(xlToLeft).Column
varNRows = Sheets(varWorksheetName). _
Cells(Rows.Count, 1).End(xlUp).Row
Sheets.Add
varTempWorksheet = ActiveSheet.Name
Sheets(varWorksheetName).Activate
Range("A1", Cells(1, varNColumns)).Copy _
Destination:=Sheets(varTempWorksheet).Range("A1")
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = -1 Then
varLocation = .SelectedItems(1)
For varNLoop = 1 To Int(Round((varNRows - 1) / varNSplitedRows, 0)) + 1
Sheets(varWorksheetName).Activate
Sheets(varWorksheetName).Range(Cells((varNLoop - 1) * varNSplitedRows + 2, 1), _
Cells((varNLoop - 1) * varNSplitedRows + varNSplitedRows + 1, varNColumns)).Copy _
Destination:=Sheets(varTempWorksheet).Range("A" & (varNLoop - 1) * varNSplitedRows + 2)
Sheets(varTempWorksheet).Activate
Sheets(varTempWorksheet).Range(Cells((varNLoop - 1) * varNSplitedRows + 2, 1), _
Cells((varNLoop - 1) * varNSplitedRows + varNSplitedRows + 1, varNColumns)).Copy
Workbooks.Add
ActiveSheet.Paste
varFileName = varLocation & "\SplitedWorkbook" & varNLoop & ".xlsx"
varFileExists = Dir(varFileName)
If varFileExists = "" Then
GoTo SaveFile
Else
varMessage = MsgBox("This file already exist. Do you want to replace it?", _
vbYesNo, "DOUBLE FILE ERROR")
If varMessage = vbYes Then
GoTo SaveFile
Else
GoTo SkipSave
End If
End If
SaveFile:
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=varLocation & "\SplitedWorkbook" & varNLoop & ".xlsx"
SkipSave:
ActiveWorkbook.Saved = True
ActiveWindow.Close
Next
End If
End With
ActiveSheet.Delete
Application.ScreenUpdating = True
End Sub