Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.89/214: Рейтинг темы: голосов - 214, средняя оценка - 4.89
Funny06
0 / 0 / 0
Регистрация: 05.10.2012
Сообщений: 3
1

Вставка текста из Excel в Word

05.10.2012, 18:42. Просмотров 42037. Ответов 63
Метки нет (Все метки)

Здравствуйте, ув. форумчане. Помогите начинающему. У меня есть экселевский файл с реквизитами клиентов. могу ли я сделать, чтобы по нажатию какой-нибудь кнопки(или по запуску макроса) создавался договор по определенному контрагенту из шаблона word?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2012, 18:42
Ответы с готовыми решениями:

Вставка текста в Word
Возникла такая проблема: на форме имеется компонент ComboBox, я из него считываю текст и заношу...

Вставка текста в Word
Подскажите пожалуйста, как в готовый документ Word вставлять в определенные места из VB-программы...

Вставка значений и в excel и в word
Приветствую... Вопрос следующий... У меня есть форма, на ней пользователь вводит свои значения, по...

Вставка данных из excel в word
Всем привет! Подскажите пожалуйста решение следующей проблемы. В Excel имеется столбец значений....

63
matresh
161 / 17 / 2
Регистрация: 14.07.2011
Сообщений: 74
05.10.2012, 19:44 2
Была такая же проблема. Но тут подсказали решение
Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Set wa=CreateObject("Word.Application") ' Создаем приложение Word
wa.Visible=True ' делаем Word видимым
 
Set wd=wa.documents.Add("C:\ (шаблон).docx")' берем шаблон
 
' в шаблоне заранее делаем закладки, и присваем им соответствующие значение из excel
For ii=1 to 5
   For jj=1 to 4
    marker="инд"& ii & jj 'наименование закладки
    wd.Bookmarks.Item(marker).Range.Text=wsh.Cells(1,jj+3).Value ' wsh-лист с которого берем значения
   Next jj
Next ii
 
wd.SaveAs Filename:= soh & "Опрос" & ".docx" ' сохраняем получившиеся файл; soh- директория сохранения
 
wd.Close True
wa.Quit
set wa=Nothing
1
Catstail
Модератор
25862 / 13359 / 2532
Регистрация: 12.02.2012
Сообщений: 21,900
05.10.2012, 19:53 3
Лучший ответ Сообщение было отмечено как решение

Решение

Вот, набросал схемку... Распакуй в какую-либо папку, открой xls-файл и щелкни по надписи "ПУСК!".

С закладками и полями, конечно, лучше будет.
8
Вложения
Тип файла: zip Задачи-VBA-57.zip (10.0 Кб, 1115 просмотров)
Miduza
176 / 15 / 2
Регистрация: 27.09.2012
Сообщений: 45
05.10.2012, 22:06 4
Кстати можно прекрасно работать без шаблонов и без связей файлов. Если интересно могу выложить файл где делал формирование документа с форматирование (с нуля) а также вставка таблиц из Excel... если поможет пишите в личку...
1
Funny06
0 / 0 / 0
Регистрация: 05.10.2012
Сообщений: 3
08.10.2012, 15:53  [ТС] 5
Цитата Сообщение от Catstail Посмотреть сообщение
Вот, набросал схемку... Распакуй в какую-либо папку, открой xls-файл и щелкни по надписи "ПУСК!".

С закладками и полями, конечно, лучше будет.
Catstail, огромное спасибо за наброски.Скажи, а можно чтобы при нажатии кнопки пуск создавались договора не на все существующие записи, а например только по выдененной строке
0
Catstail
Модератор
25862 / 13359 / 2532
Регистрация: 12.02.2012
Сообщений: 21,900
08.10.2012, 16:38 6
Конечно! Чуть позже приведу пример.
0
dzug
688 / 228 / 18
Регистрация: 17.01.2011
Сообщений: 575
Записей в блоге: 1
08.10.2012, 20:21 7
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Funny06 Посмотреть сообщение
Catstail, огромное спасибо за наброски.Скажи, а можно чтобы при нажатии кнопки пуск создавались договора не на все существующие записи, а например только по выдененной строке
Позволил себе немного переделать код уважаемого Catstail. Щёлкните правой мышкой по строке с ФИО и "брюки превращаются в элегантные шорты"...

P.S. Тыкать на форуме не принято, и ко всем необходимо обращаться вежливо и на ВЫ..
2
Вложения
Тип файла: xls Задачи-VBA-55.xls (36.0 Кб, 568 просмотров)
Catstail
Модератор
25862 / 13359 / 2532
Регистрация: 12.02.2012
Сообщений: 21,900
10.10.2012, 22:21 8
Лучший ответ Сообщение было отмечено как решение

Решение

Вот доработанный код. Чтобы выбрать строки для генерации, нужно дважды щелкнуть мышью в пятой колонке нужной строки (см.) А потом - как и раньше - "Пуск"
4
Вложения
Тип файла: zip Задачи-VBA-57a.zip (9.0 Кб, 843 просмотров)
dzug
688 / 228 / 18
Регистрация: 17.01.2011
Сообщений: 575
Записей в блоге: 1
11.10.2012, 08:39 9
Цитата Сообщение от Catstail Посмотреть сообщение
Чтобы выбрать строки для генерации, нужно дважды щелкнуть мышью в пятой колонке нужной строки
Понравился способ замены буквы n, на чёрный кружок. Я и не знал, что в Экселе есть такие чудоковатые алфавиты..
1
Catstail
Модератор
25862 / 13359 / 2532
Регистрация: 12.02.2012
Сообщений: 21,900
11.10.2012, 09:17 10
Лучший ответ Сообщение было отмечено как решение

Решение

А это не я придумал... У кого-то увидел.
1
Funny06
0 / 0 / 0
Регистрация: 05.10.2012
Сообщений: 3
11.10.2012, 14:23  [ТС] 11
Спасибо всем огромное, вы мне прямо жизнь спасли Особенная благодарность Catstail за предоставленные примеры.
0
evavdeev
1 / 1 / 0
Регистрация: 06.11.2012
Сообщений: 6
06.11.2012, 18:08 12
Подскажите пожалуйста, воспользовавшись Вашим примером, у меня возникла проблема.

Создаю Word-шаблон с определенным форматированием (шрифты, выравнивание, таблицы), а после обработки шаблона через макрос, все форматирование пропадает.

Как мне произвести вставку в шаблон, но при этом не утратить форматирование.

Спасибо!
0
Скрипт
5454 / 1135 / 49
Регистрация: 15.09.2012
Сообщений: 3,434
06.11.2012, 19:07 13
evavdeev,
  1. а каким кодом вы пользуетесь?
  2. выложите пример вашего шаблона;
  3. поясните, что нужно сделать.
0
evavdeev
1 / 1 / 0
Регистрация: 06.11.2012
Сообщений: 6
07.11.2012, 12:35 14
Брал за основу "Задачи-VBA-57a", вот что у меня получилось:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Sub main()
 
Dim wdApp As Object
Dim wdDoc As Object
 
    HomeDir$ = ThisWorkbook.Path
    
    Set wdApp = CreateObject("Word.Application")
    
    ii% = 3
    
    Do
    
      If Cells(ii%, 1).Value = "" Then Exit Do
      
      If Cells(ii%, 20).Value <> "" Then
      
         ID$ = Cells(ii%, 2).Value
         Adress$ = Cells(ii%, 5).Value
         SN$ = Cells(ii%, 12).Value
         DataC$ = Date
      
         FileCopy HomeDir$ + "\template.doc", HomeDir$ + "\" + ID$ + "_" + DataC$ + ".doc"
      
         Set wdDoc = wdApp.Documents.Open(HomeDir$ + "\" + ID$ + "_" + DataC$ + ".doc")
      
         wdDoc.Range.Text = Replace$(wdDoc.Range.Text, "&id", ID$)
         wdDoc.Range.Text = Replace$(wdDoc.Range.Text, "&adress", Adress$)
         wdDoc.Range.Text = Replace$(wdDoc.Range.Text, "&sn", SN$)
 
         wdDoc.Save
         wdDoc.Close
      
         Cells(ii%, 20).Value = ""
      
      End If
      
      ii% = ii% + 1
      
    Loop
      
    wdApp.Quit
 
    MsgBox "Готово!"
 
End Sub
При этом все работает корректно, но в полученном файле doc пропадает выравнивание, жирный шрифт, таблица и т.д. (все приводится к обычному тексту)

Надо чтобы сохранилось стандартное форматирование шаблона (сохранились все стили и таблица)
1
Вложения
Тип файла: doc template.doc (28.5 Кб, 224 просмотров)
Скрипт
5454 / 1135 / 49
Регистрация: 15.09.2012
Сообщений: 3,434
07.11.2012, 12:56 15
evavdeev, какая версия программы Word у вас (2003, 2007 или другая)?
0
evavdeev
1 / 1 / 0
Регистрация: 06.11.2012
Сообщений: 6
07.11.2012, 14:14 16
установлен Microsoft Office 2010 Pro
0
Скрипт
5454 / 1135 / 49
Регистрация: 15.09.2012
Сообщений: 3,434
07.11.2012, 14:46 17
Лучший ответ Сообщение было отмечено как решение

Решение

evavdeev, код ниже нужно вам переделать, т.к. в этом коде показан только принцип.
У меня код написан для использования только в программе Word.

Использование закладок в программе Word:
Кликните здесь для просмотра всего текста
Если планируется создавать документы без участия человека, то можно использовать закладки.
Закладка в программе Word - это поименованный диапазон в документе.
  1. Чтобы было видно закладки (Word 2010):
    Файл - Параметры - Дополнительно - Показывать содержимое документа - поставьте флажок "Показывать закладки" - OK.
  2. Вставка закладки:
    1. Поставьте курсор в документе Word, куда должен вставляться текст из книги Excel;
    2. Вкладка "Вставка" - группа "Ссылки" - Закладка - дайте имя "Закладка_1" - Добавить;
    3. Возле курсора появится серая полоска, которая означает, что здесь находится закладка.

Код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Sub Procedure_1()
    
    'Здесь нужно указать путь, где находится шаблон.
    Const sTemplatePath As String = "C:\Users\User\Desktop\template.doc"
 
    'Здесь нужно указать путь, где должен быть новый документ.
    Const sNewDocumentPath As String = "C:\Users\User\Desktop\FileName.doc"
    
    'Здесь нужно указать имя закладки, которая находится в шаблоне Word.
    'В эту закладку будет вставляться текст из книги Excel.
    Const sBookmark_1 As String = "Закладка_1"
    
    Dim oDocument As Word.Document
    
    'Создаём документ на основе шаблона.
    FileCopy Source:=sTemplatePath, Destination:=sNewDocumentPath
    
    'Открываем новый документ, чтобы занести в него данные из Excel.
    Set oDocument = Documents.Open(FileName:=sNewDocumentPath, Visible:=False)
    
    'Вставка в закладку текста.
    oDocument.Bookmarks(sBookmark_1).Range.Text = "text"
    
    'Удаление закладки, чтобы закладки не приводили пользователей в замешательство.
    oDocument.Bookmarks(1).Delete
    
    'Закрываем новый документ с сохранением.
    oDocument.Close SaveChanges:=-1
 
End Sub
3
evavdeev
1 / 1 / 0
Регистрация: 06.11.2012
Сообщений: 6
07.11.2012, 20:08 18
Большое спасибо за помощь!

Вот что у меня получилось:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Sub ExportTemplate()
 
    Dim oWord As Word.Application
    Dim oDoc As Word.Document
    Set oWord = CreateObject("Word.Application")
    
    LastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
    Data$ = Date
    sTemplateDir$ = ThisWorkbook.Path
    sTemplatePath$ = sTemplateDir$ + "\" + "template.doc"
    NumTem = 0
    
    For CurRow = 2 To LastRow
    
    If Cells(CurRow, 4) = "" Then
        GoTo Continue
    Else
    
        IDN$ = Cells(CurRow, 1).Value
        Address$ = Cells(CurRow, 2).Value
        SN$ = Cells(CurRow, 3).Value
        
        sNewDocumentPath$ = sTemplateDir$ + "\" + IDN$ + "_" + Data$ + ".doc"
    
        Const sBookmark_address As String = "address"
        Const sBookmark_idn As String = "idn"
        Const sBookmark_sn As String = "sn"
    
    FileCopy Source:=sTemplatePath$, Destination:=sNewDocumentPath$
      
     Set oDoc = oWord.Documents.Open(Filename:=sNewDocumentPath$, Visible:=False)
    
    oDoc.Bookmarks(sBookmark_address).Range.Text = Address$
    oDoc.Bookmarks(sBookmark_idn).Range.Text = IDN$
    oDoc.Bookmarks(sBookmark_sn).Range.Text = SN$
    
    oDoc.Bookmarks(1).Delete
    oDoc.Bookmarks(2).Delete
    oDoc.Bookmarks(3).Delete 'Ошибка Run-time error '5941': Запрашиваемый номер семейства не существует
    oDoc.Close SaveChanges:=-1
    NumTem = NumTem + 1
    Cells(CurRow, 4) = ""
    
    End If
      
Continue:
    
    Next CurRow
 
    MsgBox prompt:="Всего обработано: " & NumTem & " строк, _
    Title:="Созданные шаблоны"
 
End Sub
Все работает, но есть одна проблема.
В процессе выполнения скрипта, появлятся ошибка при удалении 3-ей Закладки. Ошибка описана с листенге.
Пока я с ней не смог справиться.
0
Скрипт
5454 / 1135 / 49
Регистрация: 15.09.2012
Сообщений: 3,434
07.11.2012, 20:12 19
evavdeev, удаляйте закладки не по порядковым номерам, а по именам.
Например, в сообщении #18 в коде в строке 33 идёт обращение к закладке по имени, а в строке 31 - по порядковому номеру.

Примечание: ошибка из-за того, что после удаления двух закладок, у третьей закладки порядковый номер уже изменится и станет 1.
1
evavdeev
1 / 1 / 0
Регистрация: 06.11.2012
Сообщений: 6
07.11.2012, 20:26 20
Если я правильно понял, то надо так:
Visual Basic
1
2
3
oDoc.Bookmarks(idn).Delete
    oDoc.Bookmarks(sn).Delete
    oDoc.Bookmarks(Address)
Но опять ошибка

Добавлено через 4 минуты
немного ошибся:
Visual Basic
1
2
3
oDoc.Bookmarks(idn).Delete
    oDoc.Bookmarks(sn).Delete
    oDoc.Bookmarks(Address).Delete
Ошибка таже
0
07.11.2012, 20:26
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2012, 20:26

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вставка данных из Excel в шаблон WORD
Проблема такая: Есть файл Excel из которогоданные вставляются в шаблон word? Все вставляется куда...

Вставка связных данных из Excel в Word
Добрый день! Помогите пожалуйста разобраться с проблемой. Есть файл Excel с данными. При...

Вставка текста или таблицы в WORD
Здравствуйте, уважаемые специалисты! У меня есть задача: необходимо в определенных случаях...

Вставка в Word текста из TextBox с форматированием
Не подскажите, как сделать так, чтобы текст из textbox вставлялся в Word, сохраняя при этом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.