Загрузка данных


Sub SplitTableToFilesTest10()
    Dim wsSource As Worksheet
    Dim wbNew As Workbook
    Dim lastRow As Long, r As Long, countSaved As Long
    Dim baseFolder As String, savePath As String
    Dim fileName As String
    Dim uchastok As String, address As String
    Dim fso As Object
    
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    Set wsSource = ActiveSheet
    lastRow = wsSource.Cells(wsSource.Rows.Count, "B").End(xlUp).Row
    
    ' Если исходный файл не сохранен — сохраняем на Рабочий стол
    If ThisWorkbook.Path <> "" Then
        baseFolder = ThisWorkbook.Path
    Else
        baseFolder = CreateObject("WScript.Shell").SpecialFolders("Desktop")
    End If
    
    savePath = baseFolder & "\Тест_10_файлов\"
    
    ' Надежное создание папки
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FolderExists(savePath) Then
        fso.CreateFolder savePath
    End If
    
    countSaved = 0
    
    For r = 2 To lastRow
        ' Проверяем, что строка не пустая и не служебная
        If Trim(wsSource.Cells(r, "B").Text) <> "" And InStr(1, wsSource.Cells(r, "B").Text, "КРАСН", vbTextCompare) = 0 Then
            uchastok = Trim(wsSource.Cells(r, "D").Text)
            address = Trim(wsSource.Cells(r, "F").Text)
            
            ' Формируем и полностью очищаем имя файла от запрещенных знаков и переносов строк
            fileName = "Участок_" & uchastok & "_" & address
            fileName = Replace(fileName, "/", "_")
            fileName = Replace(fileName, "\", "_")
            fileName = Replace(fileName, ":", "_")
            fileName = Replace(fileName, "*", "_")
            fileName = Replace(fileName, "?", "_")
            fileName = Replace(fileName, """", "_")
            fileName = Replace(fileName, "<", "_")
            fileName = Replace(fileName, ">", "_")
            fileName = Replace(fileName, "|", "_")
            fileName = Replace(fileName, vbCr, "")
            fileName = Replace(fileName, vbLf, "")
            fileName = Trim(fileName)
            
            If fileName = "Участок__" Or fileName = "" Then
                fileName = "Строка_" & r
            End If
            
            ' Создаем новую книгу
            Set wbNew = Workbooks.Add(xlWBATWorksheet)
            
            ' Копируем шапку и текущую строку
            wsSource.Rows(1).Copy wbNew.Sheets(1).Rows(1)
            wsSource.Rows(r).Copy wbNew.Sheets(1).Rows(2)
            
            ' Копируем ширину колонок
            wsSource.Rows(1).Copy
            wbNew.Sheets(1).Rows(1).PasteSpecial xlPasteColumnWidths
            Application.CutCopyMode = False
            
            ' Сохраняем в формате .xlsx (51 = стандартный формат книги Excel)
            wbNew.SaveAs fileName:=savePath & fileName & ".xlsx", FileFormat:=51
            wbNew.Close SaveChanges:=False
            
            countSaved = countSaved + 1
            
            ' Останавливаемся ровно после 10 файлов
            If countSaved >= 10 Then Exit For
        End If
    Next r
    
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    
    MsgBox "Готово! Успешно создано " & countSaved & " файлов в папке:" & vbCrLf & savePath, vbInformation
End Sub