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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2016, 21:17   #1
eemil
Пользователь
 
Регистрация: 15.01.2016
Сообщений: 24
По умолчанию Макрос связи Excel с Word

Здравствуйте, уважаемые. Есть макрос, который осуществляет связь между ячейками основной таблицы и шаблоном в Excel:
Sub my1()
Dim r As Long
Dim wb As Workbook, wb1 As Workbook, sFT As Worksheet
Set wb = ThisWorkbook
Set sFT = wb.Sheets("FT")
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
On Error GoTo erHdl
For r = 3 To sFT.Cells(sFT.Rows.Count, 1).End(xlUp).Row Step 2
wb.Sheets("Шаблон").Copy after:=wb1.Sheets(wb1.Sheets.Count)
shRdy: With wb1.Sheets(wb1.Sheets.Count)
.Name = Left(sFT.Cells(r, 1), 31)
.Range("C15").Formula = "=" & sFT.Cells(r, 1).Address(external:=True)
.Range("D15").Formula = "=" & sFT.Cells(r, 23).Address(external:=True)
.Range("G15").Formula = "=" & sFT.Cells(r, 3).Address(external:=True)
.Range("H15").Formula = "=" & sFT.Cells(r, 4).Address(external:=True)
.Range("H16").Formula = "=" & sFT.Cells(r, 5).Address(external:=True)
.Range("H17").Formula = "=" & sFT.Cells(r, 6).Address(external:=True)
.Range("H18").Formula = "=" & sFT.Cells(r, 7).Address(external:=True)
.Range("I15").Formula = "=" & sFT.Cells(r, 8).Address(external:=True)
.Range("I16").Formula = "=" & sFT.Cells(r, 9).Address(external:=True)
.Range("I17").Formula = "=" & sFT.Cells(r, 10).Address(external:=True)
.Range("I18").Formula = "=" & sFT.Cells(r, 11).Address(external:=True)
.Range("J16").Formula = "=" & sFT.Cells(r, 16).Address(external:=True)
.Range("K16").Formula = "=" & sFT.Cells(r, 17).Address(external:=True)
.Range("L15").Formula = "=" & sFT.Cells(r, 12).Address(external:=True)
.Range("L16").Formula = "=" & sFT.Cells(r, 13).Address(external:=True)
.Range("L17").Formula = "=" & sFT.Cells(r, 14).Address(external:=True)
.Range("L18").Formula = "=" & sFT.Cells(r, 15).Address(external:=True)
.Range("G26").Formula = "=" & sFT.Cells(r, 27).Address(external:=True)

.Range("C27").Formula = "=" & sFT.Cells(r + 1, 1).Address(external:=True)
.Range("D27").Formula = "=" & sFT.Cells(r + 1, 23).Address(external:=True)
.Range("G27").Formula = "=" & sFT.Cells(r + 1, 3).Address(external:=True)
.Range("H27").Formula = "=" & sFT.Cells(r + 1, 4).Address(external:=True)
.Range("H28").Formula = "=" & sFT.Cells(r + 1, 5).Address(external:=True)
.Range("H29").Formula = "=" & sFT.Cells(r + 1, 6).Address(external:=True)
.Range("H30").Formula = "=" & sFT.Cells(r + 1, 7).Address(external:=True)
.Range("I27").Formula = "=" & sFT.Cells(r + 1, 8).Address(external:=True)
.Range("I28").Formula = "=" & sFT.Cells(r + 1, 9).Address(external:=True)
.Range("I29").Formula = "=" & sFT.Cells(r + 1, 10).Address(external:=True)
.Range("I30").Formula = "=" & sFT.Cells(r + 1, 11).Address(external:=True)
.Range("J28").Formula = "=" & sFT.Cells(r + 1, 16).Address(external:=True)
.Range("K28").Formula = "=" & sFT.Cells(r + 1, 17).Address(external:=True)
.Range("L27").Formula = "=" & sFT.Cells(r + 1, 12).Address(external:=True)
.Range("L28").Formula = "=" & sFT.Cells(r + 1, 13).Address(external:=True)
.Range("L29").Formula = "=" & sFT.Cells(r + 1, 14).Address(external:=True)
.Range("L30").Formula = "=" & sFT.Cells(r + 1, 15).Address(external:=True)
.Range("G38").Formula = "=" & sFT.Cells(r + 1, 27).Address(external:=True)
End With
Next r
MsgBox "Готово"
GoTo fin

erHdl:
If Err.Number = 91 Then 'Object variable or With block variable not set
wb.Sheets("Шаблон").Copy
Set wb1 = ActiveWorkbook
Resume shRdy
End If
MsgBox "Непредвиденная ошибка" & Err.Number & vbLf & Err.Description, vbCritical

fin:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

На основе шаблона он создает книгу и в зависимости от числа строк в общей таблице, создает такое же число листов. Необходимо по такому же принципу формировать листы в документе Word. То есть, есть шаблон в Word к которому будет обращаться макрос и связывать ячейки из Excel с закладками в шаблоне. Связь должна быть RTF. Как такое можно реализовать, подскажите пожалуйста?
eemil вне форума Ответить с цитированием
Старый 21.01.2016, 21:48   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

В Word есть такая опция, - Слияние называется
Она как раз для таких задач

Цитата:
Связь должна быть RTF
это как? чтобы с форматированием подставлялось?

ну а если со слиянием не разберётесь, — можете формировать отдельные файлы Word (не листы в одном файле, в отдельные документы Word) нажатием одной кнопки,
при помощи этой надстройки:
http://excelvba.ru/programmes/FillDocuments
EducatedFool вне форума Ответить с цитированием
Старый 21.01.2016, 22:49   #3
eemil
Пользователь
 
Регистрация: 15.01.2016
Сообщений: 24
По умолчанию

Слияние не подходит. Нужна именно связь RTF и чтобы именно в одном документе создавались листы.
eemil вне форума Ответить с цитированием
Старый 22.01.2016, 02:35   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

судя по тому, что Вы описываете - это документ слияния, но Вам безусловно виднее... потому что Вы знаете, а мы только догадываемся

а по поводу слияние подходит-не подходит - ситуация хорошо коррелируется со старым анекдотом:
Одесса, суд, бракоразводный процесс. судья
-- а Вы не могли бы обьяснить, что подтолкнуло Вас к решению о расторжении брака?
-- она меня не удовлетворяет!
в зале суда гул неодобрения и четкий голос:
-- не, ну вы посмотрите - пол Одессы она удовлетворяет!!! а его нет!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.01.2016, 06:00   #5
AndVGri
Форумчанин
 
Регистрация: 10.02.2012
Сообщений: 109
По умолчанию

Доброе время суток
Заготовка для вставки связи в ячейки таблицы Word
Код:
Public Sub Demo()
    Dim pTable As Table, pCell As Cell
    Set pTable = ThisDocument.Tables(1)
    'здесь цикл по ячейкам таблицы Word
    Set pCell = pTable.Cell(1, 1): pCell.Range.Text = " "
    pCell.Range.Fields.Add Range:=pCell.Range.Characters.First, Type:=wdFieldLink, _
        Text:="Excel.Sheet.12 ""D:\\Path\\FileName.xlsx"" ""Лист1!R2C1"" \a \t", _
        PreserveFormatting:=False
End Sub
AndVGri вне форума Ответить с цитированием
Старый 22.01.2016, 08:15   #6
eemil
Пользователь
 
Регистрация: 15.01.2016
Сообщений: 24
По умолчанию

Попробую более корректно описать задачу. Необходимо из рабочей книги, строку 3 (пусть все строки будут называться "r"), столбец В (по счету он "2", вместе получается "r, 2"), связать (связь RTF) с закладкой "закладка1" в шаблоне Word, который находится на "D:\shablon\doc1.docx". Так как строк много, все они должны формироваться автоматически на следующих листах в этом же документе. Гибкость макроса должна заключаться в том, что если мне понадобится связать с шаблоном две строки я добавлю в макросе "r+1, 2" и изменю шаг цикла на "2". Соответственно, так же, ручками, буду добавлять столбцы и закладки.

Последний раз редактировалось eemil; 22.01.2016 в 08:20.
eemil вне форума Ответить с цитированием
Старый 22.01.2016, 10:23   #7
AndVGri
Форумчанин
 
Регистрация: 10.02.2012
Сообщений: 109
По умолчанию

Цитата:
Необходимо из рабочей книги
Так в чём проблема? Мне, например макрорекордер Word записал для вставки в произвольное место документа
Код:
Sub Макрос3()
' Макрос3 Макрос
    Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldLink, _
        PreserveFormatting:=False, Text:=" Excel.Sheet.12 ""D:\\Path\\FileName.xlsx"" ""Лист1!R2C1"" \a \f 4"
End Sub
как видите - принцип тот же
AndVGri вне форума Ответить с цитированием
Старый 22.01.2016, 10:38   #8
eemil
Пользователь
 
Регистрация: 15.01.2016
Сообщений: 24
По умолчанию

К сожалению я не пойму, что к чему в вашем макросе В каком месте код ссылается на листы в Excel, в каком месте описана строка и столбец, в каком месте код ссылается на шаблон Word, в каком месте код ссылается на закладки и в каком месте задавать шаг цикла? Пожалуйста, я прошу помочь составить макрос по типу того, который я привел в первом сообщении. Просто он оптимально подходит для моей задачи.
eemil вне форума Ответить с цитированием
Старый 22.01.2016, 11:33   #9
AndVGri
Форумчанин
 
Регистрация: 10.02.2012
Сообщений: 109
По умолчанию

Цитата:
К сожалению я не пойму, что к чему в вашем макросе
Учитывая, что вам непонятен такой простой код, можно сделать вывод, что в VBA - вы максимум способны на запись макрорекордером и запускать макрос на выполнение.
Того чего вы хотите - у меня нет желания писать за вас, а научить вас... слишком большая трата времи.
Думаю, вам проще обратиться в раздел платных заказов.
AndVGri вне форума Ответить с цитированием
Старый 22.01.2016, 12:35   #10
eemil
Пользователь
 
Регистрация: 15.01.2016
Сообщений: 24
По умолчанию

Во первых - я не нуждаюсь в ваших диагнозах и оценке моих способностей. Во вторых - я прошу о помощи не конкретно вас, а любого кто прочтет это сообщение. Если вы не можете или не хотите что-то делать, я вас не заставляю, соответственно писать о своих намерениях не стоило, тем более если вы так цените свое время (зачем тратить его на бессмысленное сообщение?). Я четко и конкретно определил задачу, кто готов помочь - я буду благодарен.
eemil вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос на изменение источника связи между Word и Excel Василий. Microsoft Office Word 16 24.11.2018 20:29
Ускорить обновление связи Word и Excel Foxx Microsoft Office Word 1 06.03.2012 00:26
Word долго обновляет связи с Excel ZSFoS Microsoft Office Word 1 26.12.2011 12:59
Связи excel c word Vladymyr17 Microsoft Office Excel 0 28.09.2009 15:52