Страницы: 1
RSS
Как создавать документы по разным шаблонам из одной таблицы Excel
 
Добрый день дорогие форумчане. Пожалуйста помогите, мучаюсь уже не один день( Есть таблица в экселе с данными для заполнения актов, вся информация одинаковая, кроме одной ячейки - акт скрытых работ/акт ответственных конструкций. Подскажите, можно ли из этой таблицы выводить информацию сразу в 2 разных  шаблона, т.е. если в ячейке написано акт скрытых работ, то выводить информацию по ШаблонСКР.dot, а если акт ответственных конструкций, то по шаблону ШаблонОТВ.dot.  
Изменено: vikttur - 22.06.2021 15:44:26
 
Ирина,  я вижу два варианте:
1. В екселе разбить таблицу на две с учетом
Цитата
Ирина написал:
акт скрытых работ/акт ответственных конструкций
2. Сделать шаблоны в екселе и проходить макросом по списку и печатать/создавать шаблоны с данными.
а есть еще 3 подождать сейчас более квалифицированные ребята придут и ВОЗМОЖНО подскажут иной вариант
Изменено: Mershik - 22.06.2021 15:12:50
Не бойтесь совершенства. Вам его не достичь.
 
Mershik Спасибо большое :) , но проблема в том, что надо сделать сразу одной кнопкой без доп. разделения на несколько таблиц т.к в примере указано мало информации, а на деле ее там очень много(
Изменено: Ирина - 22.06.2021 15:18:29
 
Ирина,
Цитата
Ирина написал:
надо сделать сразу одной кнопкой
так макрос все и разделит...и все напечатает
Не бойтесь совершенства. Вам его не достичь.
 
Mershik эммм, не совсем понимаю как это сделать, если есть возможность скиньте пример того как это должно выглядеть)
 
Ирина, а вы  скажите какой результат должен быть? печатать все акты, что более всего логично или же создать файлы с заполненными актами?
Не бойтесь совершенства. Вам его не достичь.
 
Mershik, печатать)
 
Ирина, а я увидел у Вас уже есть макрос просто замените часть
Код
Sub СформироватьАкты()
....

End sub 
на
Код
Sub СформироватьАкты()

    Dim row As Range, pi As New ProgressIndicator
    r = Cells(Rows.Count, "A").End(xlUp).row: rc = r - 2
    If rc < 1 Then MsgBox "Строк для обработки не найдено", vbCritical: Exit Sub

    pi.Show "Формирование актов": pi.ShowPercents = True: s1 = 10: s2 = 90: p = s1: a = (s2 - s1) / rc
    pi.StartNewAction , s1, "Запуск приложения Microsoft Word"

    ' Dim WA As Word.Application, WD As Word.Document: Set WA = New Word.Application    ' c подключением библиотеки Word
    Dim WA As Object, WD As Object: Set WA = CreateObject("Word.Application")    ' без подключения библиотеки Word
    НоваяПапка = NewFolderName & Application.PathSeparator
    For Each row In ActiveSheet.Rows("3:" & r)

        With row
        If .Cells(24) = "Акт ответственных  конструкций" Then
            ПутьШаблона = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаШаблона2)
            Set WD = WA.Documents.Add(ПутьШаблона): DoEvents
        Else
            ПутьШаблона = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаШаблона1)
            Set WD = WA.Documents.Add(ПутьШаблона): DoEvents
        End If
            
            ИМЯ = Trim$(.Cells(1)) & " " & Trim$(.Cells(34))
            Filename = НоваяПапка & ИМЯ & РасширениеСоздаваемыхФайлов

            pi.StartNewAction p, p + a / 3, "Создание нового файла на основании шаблона", ИМЯ
            pi.StartNewAction p + a / 3, p + a * 2 / 3, "Замена данных ...", ИМЯ
            For i = 1 To КоличествоОбрабатываемыхСтолбцов
                FindText = Cells(1, i): ReplaceText = Trim$(.Cells(i))

                ' так почему-то заменяет не всё (не затрагивает таблицу)
                'WA.Selection.Find.Execute FindText, , , , , , , wdFindContinue, False, ReplaceText, True

                pi.line3 = "Заменяется поле " & FindText
                With WD.Range.Find
                    .Text = FindText
                    .Replacement.Text = ReplaceText
                    .Forward = True
                    .Wrap = 1
                    .Format = False: .MatchCase = False
                    .MatchWholeWord = False
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                    .Execute Replace:=2
                End With
                DoEvents
            Next i
            pi.StartNewAction p + a * 2 / 3, p + a, "Сохранение файла ...", ФИО, " "
            WD.SaveAs Filename: WD.Close False: DoEvents
            p = p + a
        End With
    Next row

    pi.StartNewAction s2, , "Завершение работы приложения Microsoft Word", " ", " "
    WA.Quit False: pi.Hide
    msg = "Сформировано " & rc & " актов. Все они находятся в папке" & vbNewLine & НоваяПапка
    MsgBox msg, vbInformation, "Готово"
End Sub
и проверьте его работу
Не бойтесь совершенства. Вам его не достичь.
 
Mershik, вы гений и мой спаситель) вечером обязательно попробую, еще раз спасибо большое)
 
Mershik, по вопросу разделения на разные вордовские файлы все понятно, но попыталась прикрутить макрос к шаблону в экселе и не получается, я может не туда вставляю код, я просто совсем новичок и никак не могу понять, что к чему(((если сможете помочь, буду очень признательна)
Изменено: Ирина - 07.07.2021 15:53:11
Страницы: 1
Наверх