Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2016, 20:52   #1
eemil
Пользователь
 
Регистрация: 15.01.2016
Сообщений: 24
По умолчанию Задать цикл

Здравствуйте, уважаемые. Макрос в Экселе связывает ячейки одной строки с закладками в шаблоне Ворд. Все просто, указываю строку, столбец потом закладку, связываю их. Но строк много и нужно чтобы они автоматически по такому же принципу формировали листы в том же документе (шаблон Ворд).

Sub FT_wd()
Dim WordApp As Object
Dim WordDoc As Object
Dim wb As Workbook, ws As Worksheet

Set wb = ActiveWorkbook
Set ws = wb.Worksheets("FT")
Set WordApp = CreateObject("Word.Application")
Set WordDoc = WordApp.Documents.Open("...atx2.doc ")
WordApp.Visible = True


ws.Cells(3, 3).Copy
WordDoc.Bookmarks("kontur").Range.P asteExcelTable True, False, True

ws.Cells(3, 4).Copy
WordDoc.Bookmarks("naim").Range.Pas teExcelTable True, False, True

ws.Cells(3, 24).Copy
WordDoc.Bookmarks("diapazon").Range .PasteExcelTable True, False, True

End Sub


Подскажите как правильно задать цикл, что бы можно было и шаг задавать, и все остальные строки, по типу 3-й, формировали один документ.
eemil вне форума Ответить с цитированием
Старый 29.01.2016, 21:24   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

шаг формируется через Step в операторе for

удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 30.01.2016, 11:38   #3
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Имхо, не будет оно так работать. В документе должны быть только оригинальные закладки, то есть закладка naim может быть только на одном листе.
В цикле если запускать код
Код:
ws.Cells(NewRow, NewCol).Copy
WordDoc.Bookmarks("kontur").Range.PasteExcelTable True, False, True
то постоянно будет переписываться только закладка kontur на одном листе.
Лучше и дальше разбираться как работает слияние или, как вариант, создать много файлов а тогда макросом собрать их в одну книгу
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 30.01.2016, 17:21   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Можете попробовать готовое решение
http://excelvba.ru/programmes/FillDocuments
EducatedFool вне форума Ответить с цитированием
Старый 31.01.2016, 22:09   #5
eemil
Пользователь
 
Регистрация: 15.01.2016
Сообщений: 24
По умолчанию

Подскажите в каком месте указать лист "FT" в рабочей книге

Sub FT_wd()
Dim WA As New Word.Application
Dim WD As Word.Document, ra As Word.Range
Dim wb As Workbook, ws As Worksheet
Set wb = ThisWorkbook
Set ws = wb.Worksheets("FT")
Set WD = WA.Documents.Add(ThisWorkbook.Path & Application.PathSeparator & "atx2.dot")
With WA.Selection
.HomeKey Unit:=wdStory: .EndKey Unit:=wdStory, Extend:=wdExtend
.Copy
Set wb = ThisWorkbook
Set ws = wb.Worksheets("FT")
For i = 3 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
.Paste
.EndKey Unit:=wdStory: .HomeKey Unit:=wdStory, Extend:=wdExtend
.Find.Execute "{дата;}", False, , , , , , , , Format(Now, "dd mmmm yyyy г"), True
.EndKey Unit:=wdStory, Extend:=wdExtend
.Find.Execute "{kon}", False, , , , , , , , ws.Cells(i, 3), True
.EndKey Unit:=wdStory, Extend:=wdExtend
.Find.Execute "{nai}", False, , , , , , , , ws.Cells(i, 4), True
.EndKey Unit:=wdStory, Extend:=wdExtend
.Find.Execute "{позиция}", False, , , , , , , , ws.Cells(i, 5), True
.EndKey Unit:=wdStory, Extend:=wdExtend
.Find.Execute "{диапазон}", False, , , , , , , , ws.Cells(i, 6), True
.EndKey Unit:=wdStory
Next i
End With
WD.SaveAs ThisWorkbook.Path & Application.PathSeparator & "yes2.doc"
WD.Close False: WA.Quit False
End Sub


По всякому пробую, но не получается

Последний раз редактировалось eemil; 31.01.2016 в 22:18.
eemil вне форума Ответить с цитированием
Старый 31.01.2016, 22:23   #6
eemil
Пользователь
 
Регистрация: 15.01.2016
Сообщений: 24
По умолчанию

Разобрался.. Все работает. Код (тот что выше) рабочий, формирует множество листов в Word из данных таблицы Excel. Может кому еще пригодится

Последний раз редактировалось eemil; 31.01.2016 в 22:26.
eemil вне форума Ответить с цитированием
Старый 01.02.2016, 21:36   #7
eemil
Пользователь
 
Регистрация: 15.01.2016
Сообщений: 24
По умолчанию

Подскажите пожалуйста, куда вставить const для закладок {zak1}..{zak6} и столбцов?


Sub FT_wd()
Dim WA As Word.Application
Dim WD As Word.Document, ra As Word.Range
Dim wb As Workbook, ws As Worksheet

Set wb = ThisWorkbook
Set ws = wb.Worksheets("FT")
Set WA = CreateObject("Word.Application")
Set WD = WA.Documents.Open("D:\atx2.dot")
WA.Visible = True

With WA.Selection
.HomeKey Unit:=wdStory: .EndKey Unit:=wdStory, Extend:=wdExtend
.Copy
Set wb = ThisWorkbook
Set ws = wb.Worksheets("FT")
For i = 3 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row Step 2

.Paste
.EndKey Unit:=wdStory: .HomeKey Unit:=wdStory, Extend:=wdExtend
.Find.Execute "{zak1}", False, , , , , , , , ws.Cells(i, 3), True

.EndKey Unit:=wdStory: .HomeKey Unit:=wdStory, Extend:=wdExtend
.Find.Execute "{zak2}", False, , , , , , , , ws.Cells(i, 4), True

.EndKey Unit:=wdStory: .HomeKey Unit:=wdStory, Extend:=wdExtend
.Find.Execute "{zak3}", False, , , , , , , , ws.Cells(i, 7), True

.EndKey Unit:=wdStory: .HomeKey Unit:=wdStory, Extend:=wdExtend
.Find.Execute "{zak4}", False, , , , , , , , ws.Cells(i, 10), True

.EndKey Unit:=wdStory: .HomeKey Unit:=wdStory, Extend:=wdExtend
.Find.Execute "{zak5}", False, , , , , , , , ws.Cells(i, 11), True

.EndKey Unit:=wdStory: .HomeKey Unit:=wdStory, Extend:=wdExtend
.Find.Execute "{zak6}", False, , , , , , , , ws.Cells(i, 12), True

.EndKey Unit:=wdStory
Next i
End With

End Sub
eemil вне форума Ответить с цитированием
Старый 02.02.2016, 01:14   #8
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

кросс http://www.cyberforum.ru/vba/thread1652996.html
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как задать цикл по столбцам umka777_89 Microsoft Office Excel 3 04.06.2013 00:22
не получается задать цикл brutalis Общие вопросы Delphi 0 15.12.2011 20:20
Как правильно задать цикл? BingoBongo Общие вопросы Delphi 12 07.05.2011 09:09
Задать цикл Dagir БД в Delphi 1 01.09.2008 11:08
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34