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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2010, 14:42   #1
siimao
Пользователь
 
Регистрация: 28.02.2010
Сообщений: 11
По умолчанию Запуск макроса под word из excel

1. В excel имеется набор исходных данных и формулы расчета.
2. С помощью режима записи в word написан и отредактирован скрипт: формирование исходного текста с созданием вногоуровневого списка, установкой требуемыз абзацев, ....

Цель: имея один файл excel, запускать один макрос их этого файла, а получать результат в виде сформированного документа word (документ word не должен содержать макросов, иначе зачем писать этот макрос, когда можно к excel прикрепить заготовку word с закладками?).

Проблема в том, что excel не понимает написанного а в word-е скрипт. Есть ли решение? Спасибо.
siimao вне форума Ответить с цитированием
Старый 28.02.2010, 15:04   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Есть ли решение?
Есть.
Вы выкладываете файлы Word и excel, код записанного макроса - а мы переделываем этот макрос так, чтобы он мог работать из VBA Excel.

Ну а проще использовать готовое универсальное решение:
Цитата:
Сделал программу для заполнения документов данными из таблицы Excel (из Excel в Word)

--------------------
Надстройка предназначена для формирования (подготовки) документов по шаблонам, с заполнением созданных файлов данными из текущей книги Excel.

В качестве шаблонов могут выступать следующие типы файлов:
  • документы Word (расширения DOC, DOCX, DOCM)
  • шаблоны Word (расширения DOT, DOTX, DOTM)
  • книги Excel (расширения XLS, XLSX, XLSM, XLSB)
  • шаблоны Excel (расширения XLT, XLTX, XLTM)
  • текстовые документы (расширения TXT, DAT, XML и т.д.)

В качестве исходных данных для заполнения, используется открытый в Excel файл (с таблицей, содержащей строку заголовка)

Количество шаблонов документов не ограничено


ПРОГРАММА ПОДДЕРЖИВАЕТ ФОРМИРОВАНИЕ ДОКУМЕНТОВ В ФОРМАТЕ PDF
(создаётся файл DOC, и преобразуется в PDF средствами Word 2007 - 2010)
--------------------------------
В каких случаях вам может пригодиться эта надстройка:
  • если у вас в таблице Excel хранится список контрагентов (с их реквизитами), и вы хотите нажатием одной кнопки формировать договоры, акты или коммерческие предложения для каждого из них
  • если в вашей таблице Excel хранятся паспортные данные сотрудников, и вам необходимо быстро сформировать по шаблону приказы или прочие документы в формате Word, заполнив созданные документы данными сотрудников
  • подготовить письма, уведомления, грамоты в формате PDF или Word, заполнив созданные файлы информацией с листа Excel
  • и т.д. и т.п. - надстройку можно применять для создания любых документов на основе данных из Excel
--------------------------------

Скачать надстройку можно здесь:
http://excelvba.ru/programmes/FillDocuments

Последний раз редактировалось EducatedFool; 28.03.2012 в 11:13.
EducatedFool вне форума Ответить с цитированием
Старый 28.02.2010, 18:55   #3
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от siimao Посмотреть сообщение
Проблема в том, что excel не понимает написанного а в word-е скрипт.
Вы же тоже не понимали азбуку, пока вам не объяснили. Так же и Excel. Решение есть. И, кстати, неоднократно обсуждалось на форуме.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 28.02.2010, 19:28   #4
siimao
Пользователь
 
Регистрация: 28.02.2010
Сообщений: 11
По умолчанию

Уважаемый профессионал, скинте ссылку если есть, или хотя бы раздел где искать.
А то тут некоторые предлагают услуги за деньги за существующее решение (возможно не их). Их понять можно, но то, что я собираюсь делать - не коммерческий проект...
siimao вне форума Ответить с цитированием
Старый 28.02.2010, 19:34   #5
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

В этой теме есть пример работы с Word из Excel
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 28.02.2010, 20:35   #6
siimao
Пользователь
 
Регистрация: 28.02.2010
Сообщений: 11
По умолчанию

EducatedFool, какие два файла? Планирую иметь один файл: Excel со стандартным скриптом под excel и скриптом, созданным в word через editor. Cкрипт, созданным в word через editor, работает локально отлично, но при переносе его в excel - excel выдает ошибки; например на такие строки, как: ".LeftIndent = CentimetersToPoints(0)" и перестает ругаться, но игнорирует строку после замены "=" на ".".
Простая вставка абзацев с вкладками не вызывает проблем, но хочеться выполнить word-макрос (написанный в word), который был бы интегрирован в excel со всеми вытекающими!
Пример:
1. Стандартная обработка в excel
2. Открытие новой книги Word
3. Заполнение листа Word:

(см. прикрепленный файл)

4. Вставка данных из Excel в Word (стандартным способом).

Интересует только проблемный п. 3

Спасибо за любую помощь.
Вложения
Тип файла: txt 1.txt (4.6 Кб, 289 просмотров)
siimao вне форума Ответить с цитированием
Старый 28.02.2010, 20:38   #7
siimao
Пользователь
 
Регистрация: 28.02.2010
Сообщений: 11
По умолчанию

Спасибо за ссылку. Но как я разобрался - в примере наличиствует явный перенос данных из excel в word. У меня - другая задача. Шерстю дальше форум с целью поиска ответа.
siimao вне форума Ответить с цитированием
Старый 28.02.2010, 22:42   #8
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от siimao Посмотреть сообщение
Спасибо за ссылку. Но как я разобрался - в примере наличиствует явный перенос данных из excel в word. У меня - другая задача. Шерстю дальше форум с целью поиска ответа.
Значит, не разобрался. В примере можно увидеть принцип работы с другим приложением. И совсем неважно, что ты будешь делать: использовать уже готовый документ или создавать новый и заполнять своими данными.
Не подумай, что я издеваюсь, но скрипт под Excel ты где взял? Если сам написал, то должен хотя бы приблизительно представлять, что для запуска скрипта для Word нужно, как минимум, иметь объект Word.
Вот тебе пример:
Код:
Sub test()
  Dim wdApp As Object 'Переменная для приложения Word
  
  Set wdApp = CreateObject("Word.Application") 'Cоздаём новый экземпляр Word и записываем его в переменную
  With wdApp
    .Documents.Add 'Добавляем новый документ
    'Печатаем в нём текст
    .Selection.TypeText "Этот текст напечатан из Excel." & vbCr & "Активный лист: """ & ActiveSheet.Name & """"
    'Показываем приложение
    .Visible = True
  End With
  Set wdApp = Nothing 'Уничтожаем ссылку на приложение
End Sub
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 28.02.2010 в 22:49.
viter.alex вне форума Ответить с цитированием
Старый 28.02.2010, 23:00   #9
siimao
Пользователь
 
Регистрация: 28.02.2010
Сообщений: 11
По умолчанию

Буду разбираться дальше .
Но чтобы сэкономить время всех я писал следующее:
"...
2. Открытие новой книги Word
...
Интересует только проблемный п. 3"
С п. 2 я разобрался
Вложения
Тип файла: doc Шаблон расчета-1.doc (112.5 Кб, 87 просмотров)

Последний раз редактировалось siimao; 28.02.2010 в 23:21. Причина: добавлен файл с примером результата, который бы хотелось получить работой ОДНОГО Excel (Word как инструмент)
siimao вне форума Ответить с цитированием
Старый 01.03.2010, 01:49   #10
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Вообще говоря, в Word есть такая замечательная вещь как Шаблоны (Templates). Во многих случаях удобно создавать новый документ на основе шаблона. В шаблон можно поместить макрокод на VBA который будет автоматически выполняться, например, в момент создания нового документа на базе этого шаблона.
Можно так же выполнить макрос из шаблона в любой момент с помощью метода Application.Run (для Word).
Когда создаются различные документы в зависимости от исходных данных в Excel, бывает удобно задавать шаблон динамически.
Вот пример кода для Excel, открывающего документ test.doc в каталоге рабочей книги Excel, динамически подключающего
шаблон MyTemplate.dot из этого же каталога и выполняющего макрос Word MySubFromTemplate изподключенного шаблона.
Код:
Public Sub CallSubFromWordTemplate()
   Dim oWord As Object
   Dim oDoc As Object

   On Error Resume Next
   Set oWord = GetObject(, "Word.Application") 'Ищем уже открытый Word
   If Err.Number <> 0 Then 'Если не нашли - создаём новый экземпляр
       Err.Clear
       Set oWord = CreateObject("Word.Application")
   End If
   If oWord Is Nothing Then
       MsgBox "Невозможно создать экземпляр приложения MS Word!", vbCritical, vbNullString
       Exit Sub
   End If
   Set oDoc = oWord.Documents.Open(ThisWorkbook.Path & "\test.doc")
   'Если мы желаем создать новый документ на базе шаблона, используем метод .Add вместо .Open
   If Err.Number <> 0 Then
      MsgBox "Ошибка при открытии модифицируемого документа"
      Exit Sub
   End If
   oDoc.AttachedTemplate = ThisWorkbook.Path & "\MyTemplate.dot" 'Подключаем наш шаблон к документу
   oWord.Visible = True
   oWord.Run "MySubFromTemplate" 'Выполняем макрос, сохранённый в шаблоне
   'В случае необходимости можно восстановить стандартный шаблон выполнив код
   'With oWord.NormalTemplate
   '    oDoc.AttachedTemplate = .Path & "\" & .Name
   'End With
End Sub
Для передачи данных из Excel в Word при таком подходе удобно использовать коллекцию Variables.
Пример:
Код:
oDoc.Variables.Add Name:="_НДС",Value:="18%"
Можно передавать сразу массив
Код:
oDoc.Variables.Add Name:="_Параметры", Value=Join(Application.Transpose([A1:A5]), ";")
Матрицу так же можно передать по строкам или столбцам. Впрочем, поле INCLUDETEXT никто не отменял

В Word используйте функцию Split для разбора списковых параметров.
Доступ к переменной из VBA кода Word осуществляется по имени
Код:
... ActiveDocument.Variables("_НДС").Value
Помимо прочих достоинств такой подход позволяет использовать в шаблоне условные поля (IF FIELD).
Точки модификации шаблона удобно указывать не с помощью закладок (как это обычно делается), а используя поля типа ADDIN
{ ADDIN _НДС}
Такой подход позволяет указывать в поле дополнительные параметры модификаторы для формирования вставляемого в формируемый документ текста. Например, указание на необходимость выведения суммы или даты прописью, или указание в каком падеже необходимо подставлять передаваемые из Excel ФИО. В частности, удобно именно здесь формировать стандартные строки типа "сумма с ндс".
Кстати, модифицирующую информацию удобно вставлять не вместо значения поля, а после поля с помощью метода .InsertAfter.
Это очень облегчает отладку шаблона.
Важно помнить что поля в теле самого документа и в размещённых в нём шейпах составляют отдельные коллекции.
Дополнительным бонусом подхода является возможность заполнения на основании одного пользовательского поля форматных
таблиц ( по одному символу в ячейке). При этом из Excel передаётся, например, строка (переменная) ФИО, а в шаблоне указывается:
{ADDIN ФИО.ИМЯ /T}, или {ADDIN ФИО.ФАМИЛИЯ /T}, или {ADDIN ФИО /W3 /ПР /T}.
Здесь /T указывает на табличный способ заполнения, а /W3 - третье слово (отчество) от ФИО в родительном (/ПР) падеже.
Можно чуть изменив технологию подставлять из EXCEL диаграммы и создавать сложные шейпы рисунки на основе передаваемых
данных.

Последний раз редактировалось Aent; 01.03.2010 в 03:10.
Aent вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск макроса serafim09 Microsoft Office Excel 9 03.09.2009 16:55
Копирование таблиц из Excel в Word с помощью макроса Kostaen Microsoft Office Word 3 25.08.2009 05:00
Запуск макроса в Excel из программы на C# AnnNet Общие вопросы .NET 1 05.06.2009 16:23
Запуск макроса с параметрами из другого макроса Saladin Microsoft Office Excel 2 19.01.2009 09:43
Как создать новый файл Word из макроса Excel? Dorvir Microsoft Office Excel 12 08.07.2008 16:50