Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Изменение файла-шаблона Word - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Изменение файла-шаблона Word (Макросы/Sub)
Изменение файла-шаблона Word
Sashagor1982 Дата: Вторник, 05.04.2022, 20:47 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Добрый день, подскажите, необходимо взять шаблон Word, произвести в нем определенные изменения и сохранить измененный файл, таких операций надо сделать определенное множество
[vba]
Код
Sub proccesingWord()
    Dim myWord As New Word.Application
    Dim myDocument As Word.Document
    Dim numer As Integer
    
    For numer = 3 To Cells(Rows.Count, 4).End(xlUp).Row
        Set myDocument = myWord.Documents.Open("C:\Users\sasha\OneDrive\Рабочий стол\Послужные\Послужной.doc")
        myDocument.Content.Find.Execute "#ФАМИЛИЯ#", False, False, False, False, False, True, 1, False, Cells(numer, 1).Value, 2
        myDocument.SaveAs2 ("C:\Users\sasha\OneDrive\Рабочий стол\Послужные\Созданное\" + Cells(numer, 1).Value + ".doc")
        myDocument.Close
    Next

End Sub
[/vba]
Данный код в принципе выполняет задачу, однако процесс получается слишком долгим, т.к. шаблон каждый раз открывается, потом закрывается, есть ли возможность оптимизировать работу. Спасибо
 
Ответить
СообщениеДобрый день, подскажите, необходимо взять шаблон Word, произвести в нем определенные изменения и сохранить измененный файл, таких операций надо сделать определенное множество
[vba]
Код
Sub proccesingWord()
    Dim myWord As New Word.Application
    Dim myDocument As Word.Document
    Dim numer As Integer
    
    For numer = 3 To Cells(Rows.Count, 4).End(xlUp).Row
        Set myDocument = myWord.Documents.Open("C:\Users\sasha\OneDrive\Рабочий стол\Послужные\Послужной.doc")
        myDocument.Content.Find.Execute "#ФАМИЛИЯ#", False, False, False, False, False, True, 1, False, Cells(numer, 1).Value, 2
        myDocument.SaveAs2 ("C:\Users\sasha\OneDrive\Рабочий стол\Послужные\Созданное\" + Cells(numer, 1).Value + ".doc")
        myDocument.Close
    Next

End Sub
[/vba]
Данный код в принципе выполняет задачу, однако процесс получается слишком долгим, т.к. шаблон каждый раз открывается, потом закрывается, есть ли возможность оптимизировать работу. Спасибо

Автор - Sashagor1982
Дата добавления - 05.04.2022 в 20:47
_Boroda_ Дата: Среда, 06.04.2022, 09:43 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Дык один раз откройте и один закройте. И сам Ворд, кстати, тоже закрыть неплохо бы в конце

[vba]
Код
   Set myDocument = myWord.Documents.Open("C:\Users\sasha\OneDrive\Рабочий стол\Послужные\Послужной.doc")
    For numer = 3 To Cells(Rows.Count, 1).End(xlUp).Row
        myDocument.Content.Find.Execute "#ФАМИЛИЯ#", False, False, False, False, False, True, 1, False, Cells(numer, 1).Value, 2
        myDocument.SaveAs2 ("C:\Users\sasha\OneDrive\Рабочий стол\Послужные\Созданное\" + Cells(numer, 1).Value + ".doc")
        myDocument.Undo
    Next
    myDocument.Close
    myWord.Quit
[/vba]

Или без Ундо
[vba]
Код
    Set myDocument = myWord.Documents.Open("C:\Users\sasha\OneDrive\Рабочий стол\Послужные\Послужной.doc")
    With myDocument
        For numer = 3 To Cells(Rows.Count, 1).End(xlUp).Row
            If numer = 3 Then
                t_ = "#ФАМИЛИЯ#"
            Else
                t_ = Cells(numer - 1, 1).Value
            End If
            .Content.Find.Execute t_, False, False, False, False, False, True, 1, False, Cells(numer, 1).Value, 2
            .SaveAs2 ("C:\Users\sasha\OneDrive\Рабочий стол\Послужные\Созданное\" + Cells(numer, 1).Value + ".doc")
        Next
    End With
    myDocument.Close
    myWord.Quit
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995


Сообщение отредактировал _Boroda_ - Среда, 06.04.2022, 10:26
 
Ответить
СообщениеДык один раз откройте и один закройте. И сам Ворд, кстати, тоже закрыть неплохо бы в конце

[vba]
Код
   Set myDocument = myWord.Documents.Open("C:\Users\sasha\OneDrive\Рабочий стол\Послужные\Послужной.doc")
    For numer = 3 To Cells(Rows.Count, 1).End(xlUp).Row
        myDocument.Content.Find.Execute "#ФАМИЛИЯ#", False, False, False, False, False, True, 1, False, Cells(numer, 1).Value, 2
        myDocument.SaveAs2 ("C:\Users\sasha\OneDrive\Рабочий стол\Послужные\Созданное\" + Cells(numer, 1).Value + ".doc")
        myDocument.Undo
    Next
    myDocument.Close
    myWord.Quit
[/vba]

Или без Ундо
[vba]
Код
    Set myDocument = myWord.Documents.Open("C:\Users\sasha\OneDrive\Рабочий стол\Послужные\Послужной.doc")
    With myDocument
        For numer = 3 To Cells(Rows.Count, 1).End(xlUp).Row
            If numer = 3 Then
                t_ = "#ФАМИЛИЯ#"
            Else
                t_ = Cells(numer - 1, 1).Value
            End If
            .Content.Find.Execute t_, False, False, False, False, False, True, 1, False, Cells(numer, 1).Value, 2
            .SaveAs2 ("C:\Users\sasha\OneDrive\Рабочий стол\Послужные\Созданное\" + Cells(numer, 1).Value + ".doc")
        Next
    End With
    myDocument.Close
    myWord.Quit
[/vba]

Автор - _Boroda_
Дата добавления - 06.04.2022 в 09:43
Sashagor1982 Дата: Среда, 06.04.2022, 13:29 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Спасибо попробую
 
Ответить
СообщениеСпасибо попробую

Автор - Sashagor1982
Дата добавления - 06.04.2022 в 13:29
Sashagor1982 Дата: Суббота, 09.04.2022, 21:48 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
_Boroda_, Добрый день, подскажите, Undo отменяет последнее действие, однако каким образом можно вернуть изначальный myDocument? Вот пример моего кода
[vba]
Код
Sub proccesingWord()
    Dim myWord As New Word.Application
    Dim myDocument As Word.Document
    Dim numer As Integer
    Set myDocument = myWord.Documents.Open("C:\Users\sasha\OneDrive\Рабочий стол\Послужные\Послужной.doc")
    
    
    For numer = 3 To 10 'Cells(Rows.Count, 4).End(xlUp).Row
        
        myDocument.Content.Find.Execute "#ФАМИЛИЯ#", False, False, False, False, False, True, 1, False, Cells(numer, 1).Value, 2
        myDocument.Content.Find.Execute "#Имя#", False, False, False, False, False, True, 1, False, Cells(numer, 2).Value, 2
        myDocument.Content.Find.Execute "#Отчество#", False, False, False, False, False, True, 1, False, Cells(numer, 3).Value, 2
        myDocument.Content.Find.Execute "#Удостоверение#", False, False, False, False, False, True, 1, False, Cells(numer, 5).Value, 2
        myDocument.Content.Find.Execute "#дата_рождения#", False, False, False, False, False, True, 1, False, Cells(numer, 6).Value, 2
        myDocument.Content.Find.Execute "#место_рождения#", False, False, False, False, False, True, 1, False, Cells(numer, 7).Value, 2
        myDocument.Content.Find.Execute "#паспорт-гражданина#", False, False, False, False, False, True, 1, False, Cells(numer, 8).Value, 2
        myDocument.Content.Find.Execute "#загранпаспорт#", False, False, False, False, False, True, 1, False, Cells(numer, 9).Value, 2
        
        
        myDocument.SaveAs2 ("C:\Users\sasha\OneDrive\Рабочий стол\Послужные\Созданное\" + Cells(numer, 1).Value + ".doc")
        myDocument.Undo
        
    Next   
    myDocument.Close
    myWord.Quit   

End Sub
[/vba]
Спасибо
К сообщению приложен файл: 4702204.xls (68.5 Kb)


Сообщение отредактировал Sashagor1982 - Суббота, 09.04.2022, 21:52
 
Ответить
Сообщение_Boroda_, Добрый день, подскажите, Undo отменяет последнее действие, однако каким образом можно вернуть изначальный myDocument? Вот пример моего кода
[vba]
Код
Sub proccesingWord()
    Dim myWord As New Word.Application
    Dim myDocument As Word.Document
    Dim numer As Integer
    Set myDocument = myWord.Documents.Open("C:\Users\sasha\OneDrive\Рабочий стол\Послужные\Послужной.doc")
    
    
    For numer = 3 To 10 'Cells(Rows.Count, 4).End(xlUp).Row
        
        myDocument.Content.Find.Execute "#ФАМИЛИЯ#", False, False, False, False, False, True, 1, False, Cells(numer, 1).Value, 2
        myDocument.Content.Find.Execute "#Имя#", False, False, False, False, False, True, 1, False, Cells(numer, 2).Value, 2
        myDocument.Content.Find.Execute "#Отчество#", False, False, False, False, False, True, 1, False, Cells(numer, 3).Value, 2
        myDocument.Content.Find.Execute "#Удостоверение#", False, False, False, False, False, True, 1, False, Cells(numer, 5).Value, 2
        myDocument.Content.Find.Execute "#дата_рождения#", False, False, False, False, False, True, 1, False, Cells(numer, 6).Value, 2
        myDocument.Content.Find.Execute "#место_рождения#", False, False, False, False, False, True, 1, False, Cells(numer, 7).Value, 2
        myDocument.Content.Find.Execute "#паспорт-гражданина#", False, False, False, False, False, True, 1, False, Cells(numer, 8).Value, 2
        myDocument.Content.Find.Execute "#загранпаспорт#", False, False, False, False, False, True, 1, False, Cells(numer, 9).Value, 2
        
        
        myDocument.SaveAs2 ("C:\Users\sasha\OneDrive\Рабочий стол\Послужные\Созданное\" + Cells(numer, 1).Value + ".doc")
        myDocument.Undo
        
    Next   
    myDocument.Close
    myWord.Quit   

End Sub
[/vba]
Спасибо

Автор - Sashagor1982
Дата добавления - 09.04.2022 в 21:48
Апострофф Дата: Воскресенье, 10.04.2022, 09:04 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 448
Репутация: 124 ±
Замечаний: 0% ±

Excel 1997
Sashagor1982, разве не очевидно, что повторный вызов
[vba]
Код
Set myDocument = myWord.Documents.Open("C:\Users\sasha\OneDrive\Рабочий стол\Послужные\Послужной.doc")
[/vba]
"вернет изначальный myDocument"?
 
Ответить
СообщениеSashagor1982, разве не очевидно, что повторный вызов
[vba]
Код
Set myDocument = myWord.Documents.Open("C:\Users\sasha\OneDrive\Рабочий стол\Послужные\Послужной.doc")
[/vba]
"вернет изначальный myDocument"?

Автор - Апострофф
Дата добавления - 10.04.2022 в 09:04
Sashagor1982 Дата: Воскресенье, 10.04.2022, 12:46 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Апострофф, да но при этом он будет заново загружаться, а цель задачи загрузить один раз.
 
Ответить
СообщениеАпострофф, да но при этом он будет заново загружаться, а цель задачи загрузить один раз.

Автор - Sashagor1982
Дата добавления - 10.04.2022 в 12:46
nilem Дата: Воскресенье, 10.04.2022, 13:23 | Сообщение № 7
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Sashagor1982,
а если использовать шаблон?
типа:
Set myDocument = myWord.Documents.Open("C:\Users\sasha\OneDrive\Рабочий стол\Послужные\Послужной.dotx")
Undo в этом случае не нужно


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Воскресенье, 10.04.2022, 13:24
 
Ответить
СообщениеSashagor1982,
а если использовать шаблон?
типа:
Set myDocument = myWord.Documents.Open("C:\Users\sasha\OneDrive\Рабочий стол\Послужные\Послужной.dotx")
Undo в этом случае не нужно

Автор - nilem
Дата добавления - 10.04.2022 в 13:23
Sashagor1982 Дата: Воскресенье, 10.04.2022, 14:13 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
nilem, а есть способ создать клон объекта word.document?
 
Ответить
Сообщениеnilem, а есть способ создать клон объекта word.document?

Автор - Sashagor1982
Дата добавления - 10.04.2022 в 14:13
nilem Дата: Воскресенье, 10.04.2022, 15:35 | Сообщение № 9
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Set myDocument = myWord.Documents.Open("...\Послужной.dotx") - это и будет клон (копия) файла Послужной.dotx. Сам файл-шаблон (dotx) при этом останется неизменным.
Так работают шаблоны в Екселе. Наверное, и в Ворде так же.


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеSet myDocument = myWord.Documents.Open("...\Послужной.dotx") - это и будет клон (копия) файла Послужной.dotx. Сам файл-шаблон (dotx) при этом останется неизменным.
Так работают шаблоны в Екселе. Наверное, и в Ворде так же.

Автор - nilem
Дата добавления - 10.04.2022 в 15:35
nilem Дата: Воскресенье, 10.04.2022, 15:40 | Сообщение № 10
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Вордовский файл можете показать?


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеВордовский файл можете показать?

Автор - nilem
Дата добавления - 10.04.2022 в 15:40
_Boroda_ Дата: Понедельник, 11.04.2022, 09:24 | Сообщение № 11
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Undo отменяет последнее действие, однако каким образом можно вернуть изначальный myDocument?

Справка Унды
Просто указываем количество отмен. Undo(8), например

Кстати, а Вы пробовали второй мой макрос, который без Ундо? Там все просто

И очень интересно, получится ли с шаблоном. Ни разу так не делал. Отпишитесь потом, пожалуйста


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Undo отменяет последнее действие, однако каким образом можно вернуть изначальный myDocument?

Справка Унды
Просто указываем количество отмен. Undo(8), например

Кстати, а Вы пробовали второй мой макрос, который без Ундо? Там все просто

И очень интересно, получится ли с шаблоном. Ни разу так не делал. Отпишитесь потом, пожалуйста

Автор - _Boroda_
Дата добавления - 11.04.2022 в 09:24
Sashagor1982 Дата: Понедельник, 11.04.2022, 20:35 | Сообщение № 12
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Дело в том, что изменения могут быть разные в зависимости от условий, как можно вернуть изначальный объект?
 
Ответить
СообщениеДело в том, что изменения могут быть разные в зависимости от условий, как можно вернуть изначальный объект?

Автор - Sashagor1982
Дата добавления - 11.04.2022 в 20:35
Sashagor1982 Дата: Среда, 13.04.2022, 21:57 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
У меня с шаблоном не получилось.
[vba]
Код
Set cloneDoc = myDocument
[/vba]
Почему не работает эта конструкция?


Сообщение отредактировал Sashagor1982 - Среда, 13.04.2022, 22:03
 
Ответить
СообщениеУ меня с шаблоном не получилось.
[vba]
Код
Set cloneDoc = myDocument
[/vba]
Почему не работает эта конструкция?

Автор - Sashagor1982
Дата добавления - 13.04.2022 в 21:57
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Изменение файла-шаблона Word (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!