Страницы: 1
RSS
Лист (данные на листе) сохранить как разные документы. Признак того, что это новый документ - "Текст такой-то"
 
Добрый день!

Прошу помочь в следующем.

Есть лист excel.
На нем выведено несколько документов.
У каждого документа в ячейке "А:I" есть текст - "Специальный бланк".

Как сохранить каждый документ на листе как отдельный файл?
(вообще не понятно - а как понять что это последний документ на листе?? на крайняк - на последний документ можно "забить")

Формат сохраняемых файлов - любой.
Количество документов на листе в оригинальном файле - порядка 1000 документов.
Во вложении - пример для понимания. Из этого примера - должно получиться 3 файла (ну или 2, если на последний "забить")

Спасибо!!
 
Иван Иванов, Что-то у вас с файлом примером прям беда! Ну что-ж, принимайте как подготовили файл и как оьъяснили.
Код
Option Explicit

Sub SplitSheetAndSave()
    Dim ws          As Worksheet
    Set ws = ThisWorkbook.Worksheets("Лист1")

    Dim lastRow     As Long
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    Dim i           As Long
    Application.ScreenUpdating = False

    For i = 1 To lastRow

        If ws.Cells(i, 1).value = "Специальный бланк" Then

            Dim startRow As Long
            startRow = i

            Dim endRow As Long
            endRow = startRow

            Do While endRow <= lastRow And ws.Cells(endRow + 1, 1).value <> "Специальный бланк"
                endRow = endRow + 1
            Loop

            Dim fileName As String
            fileName = InputBox("Enter the file name for the block starting at row " & startRow & ":", "File Name Input")
            If fileName = "" Then fileName = "File_" & i

            Dim filePath As String
            filePath = ThisWorkbook.Path & "\" & fileName & ".xlsx"

            Dim wbNew As Workbook
            Set wbNew = Workbooks.Add

            With wbNew.Sheets(1)
                ws.Range(ws.Cells(startRow, 1), ws.Cells(endRow, 9)).Copy
                .Range("A1").PasteSpecial Paste:=xlPasteValues
                Application.CutCopyMode = False
                .Columns("A:I").AutoFit
            End With

            wbNew.SaveAs fileName:=filePath, FileFormat:=xlOpenXMLWorkbook
            wbNew.Close SaveChanges:=False
        End If

    Next i

    Set wbNew = Nothing
    Set ws = Nothing
    Application.ScreenUpdating = True
    MsgBox "Василий, Рабочий лист был разделён на отдельные файлы и сохранены! "
End Sub
Надюсь вы разберётесь куда данный код вставлять и как его сохранить. Удачи.
 
Да, ок!
Спасибо!
Дальше докручу сам.

И вопросики вообще...
А почему при другом имени листа (например, при TDSheet вместо Лист1) выдает ошибку 9 (Out of range)?
(само собой в коде заменил название листа)
 
Иван Иванов, Данные так-же расположены, текст Специальный бланк в той-же колонке (A) объеденённых ячеек нет? Вообщем, я не вижу реальную структуру вашего листа поэтому точно не могу сказать. Код на вашем файле примере работает отлично, я размножал данные и всё Ок.
Изменено: MikeVol - 01.11.2024 17:16:17 (Дополнил ответ файлом примером для понимания что код рабочий)
 
Н-да....
А все так красиво начиналось.
А получилось совсем не красиво((

В результате разбивки хотя и получилось два файла, а формат полностью сбивается((

Во вложении - реал.
Может можно что-то придумать??

Да, чуть не забыл - это неизменяемый текст в постоянном столбце - "Специализированная  форма  № М-76"

Спасибо!
Изменено: Иван Иванов - 01.11.2024 17:32:39
 
Иван Иванов, Так это уже другой файл и совершено инной подход нужен к данному вопросу. Ваша вина в том что вы не подготовили файл пример максимально схожим с вашим файлом оригиналом по структуре. В правилах форума это сказано, пункт 2. Тут уже я вам ничем помочь не могу так как вопрос уже скорее всего для данного раздела. Удачи.
Страницы: 1
Наверх