1

Тема: Использование объекта Word в модулях Excel

Проблема в том что создв объекта Ворд:


Sub a ()
Dim objWrd As Object, objDoc As Object
   Set objWrd = CreateObject("Word.Application")
   Set objDoc = objWrd.Documents
    objDoc.Add DocumentType:=wdNewBlankDocument
objDoc(1).Application.Selection.TypeText Text:="Какой то текст"
objDoc(1).Application.Selection.TypeText Text:="Еще какой то текст"
objDoc(1).Application.Selection.TypeText Text:="И так практически до бесконечности с различным текстом"
objWrd.Visible = True
End Sub

Происходит так сказать переполнение которое не позволяет выполнить данный макрос.
При создании подобного макроса с продолжением текста, сам текст уже идет в другом документе ворд (так как я понимаю создается еще один объект), а надо чтоб продолжился в первом созданном документе, но получается из другова макроса того же документа ексель.

2

Re: Использование объекта Word в модулях Excel

arcnik, ещё раз, и, пожалуйста, по-русски: что, откуда, где создаётся. И зачем.

3 (изменено: arcnik, 2013-05-20 08:58:41)

Re: Использование объекта Word в модулях Excel

Задача:
1) Построить отчет в формате Word (в одном файле *.doc), по данным из таблице Excel.
Решил:
1) Создал Excel;
1.1) Пишу макрос к форме с условиями;
1.2) Оформляю код к кнопке отчет:
1.2.1) Создаю "Sub a()" вызывающий Word (см. код представленный мною выше);
1.2.2) Начинаю этот "Sub a()" заполнять условиями текстом и прочим..., что будет опубликовано в документе Word.
Проблема:
1.2.2) Код всего "Sub a()" слишком большой в строк этак тысячу.
Решил:
1.2.1) Создать "Sub b()" с продолжением кодов, условий текстом к "Sub a()".
Проблема:
"Sub b()" создает новый документ Word и пишет текст в него, а надо продолжить публикацию в первый созданный документ Word.

4

Re: Использование объекта Word в модулях Excel

arcnik, на днях было: VBA: MSWord инициализация большого массива. Так что, решение разбить код процедуры на несколько — совершенно правильно (один вопрос — что такого может быть в процедуре, чтобы выйти за рамки ограничений?).

Проблема: …

Создавайте объект Word.Application и объект документа в основной процедуре, привязанной к кнопке создания отчёта. Затем вызывайте N процедур, передавая им объект документа в качестве параметра. По завершении отработки процедур — закрывайте в основной процедуре документ, делайте выход из приложения, затем очищайте объекты документа и приложения.

Болванка кода:

Option Explicit

Sub Кнопка1_Щелкнуть()
    Dim objWord As Word.Application
    Dim objDocument As Word.Document
    
    Set objWord = CreateObject("Word.Application")
    Set objDocument = objWord.Documents.Add()
    
    '…
    
    Call MySub1(objDocument)
    Call MySub2(objDocument)
    
    '…
    
    objDocument.Close
    objWord.Quit
    
    Set objDocument = Nothing
    Set objWord = Nothing
End Sub

Sub MySub1(objDoc As Word.Document)
    '…
End Sub

Sub MySub2(objDoc As Word.Document)
    '…
End Sub

P.S. Не забудьте сделать в редакторе VBA ссылку на объектную модель Word'а.

5

Re: Использование объекта Word в модулях Excel

alexii пишет:

  (один вопрос — что такого может быть в процедуре, чтобы выйти за рамки ограничений?)

Проект около 200 страниц.

Большое спасибо за помощь и "Болванку"!

6

Re: Использование объекта Word в модулях Excel

Проект около 200 страниц.

Что ж там такое, хоть намекните?

7

Re: Использование объекта Word в модулях Excel

alexii пишет:

Что ж там такое, хоть намекните?

Существует великое множество проектной документации, так вот этот проект один из этих множеств, и как в любом проекте есть типовые слова, а есть умозаключения, которые по своей сути логика на основании нормативных документов и тех или иных условий. Как итог, то что пишу Я, возможность в несколько кликов создать проектик, или получить желаемые главы проекта, естественно задав условия необходимые по проекту.