Страницы: 1
RSS
Создание из Excel файла Word и создание таблицы
 
Уважаемые, возможно вопрос не совсем в тему... Все-таки это PlanetaExcel, а не Word. Но ситуация следующая.
Создаю через Excel вордовский файл и создаю там таблицу с помощью кода ниже (потом она будет заполняться данными из таблицы excel), но выскакивает ошибка.
Не могу понять в чем дело. Если очень сильно туплю, ткните носом, пожалуйста.

Код
Sub Макрос4()
    
Dim oWord As Word.Application
Dim oDoc As Word.Document
Set oWord = CreateObject("Word.Application")
Set oDoc = oWord.Documents.Add()
oWord.Visible = True
oDoc.Activate
With oWord
    ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=16, NumColumns _
        :=2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
        wdAutoFitWindow
    With Selection.Tables(1)
        If .Style <> "Сетка таблицы" Then
            .Style = "Сетка таблицы"
        End If
        .ApplyStyleHeadingRows = True
        .ApplyStyleLastRow = False
        .ApplyStyleFirstColumn = True
        .ApplyStyleLastColumn = False
        .ApplyStyleRowBands = True
        .ApplyStyleColumnBands = False
    End With
    End With
End Sub
 
Как из Excel обратиться к другому приложению
прочитайте внимательно. Пригодится.
Что до ошибки - явно в строке с ActiveDocument. Excel не знает о таком объекте или свойстве, поэтому и пишет ошибку. Правильно будет поставить перед ActiveDocument точку, чтобы явно указать его принадлежность объекту Word
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Если надоест писать макросы, - можете воспользоваться готовым решением:
http://excelvba.ru/programmes/FillDocuments
(там только настроить немного, - и всё будет работать)
 
The_Prist, Точку поставила, но все равно та же ошибка.
 
Какая? Где именно? Штатный экстрасенс в отпуске, так что Вы уж опишите подробнее проблему.
Selection - тоже без точки и без явного указания родительского объекта в виде документа Word. По идее должно быть oDoc.Selection. Но это не совсем правильно, т.к. в данном случае таблица лишь одна и лучше привязаться к этому, а не к выделению: oDoc.Tables(1). И один With тоже лишний, судя по всему. Он вообще нигде не используется.
По идее должно получиться нечто вроде:
Код
Sub Макрос4()
    Dim oWord As Word.Application
    Dim oDoc As Word.Document
    Set oWord = CreateObject("Word.Application")
    Set oDoc = oWord.Documents.Add()
    oWord.Visible = True
    oDoc.Activate
    oDoc.Tables.Add Range:=oDoc.Range, NumRows:=16, NumColumns _
        :=2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
        wdAutoFitWindow
    With oDoc.Tables(1)
        If .Style <> "Сетка таблицы" Then
            .Style = "Сетка таблицы"
        End If
        .ApplyStyleHeadingRows = True
        .ApplyStyleLastRow = False
        .ApplyStyleFirstColumn = True
        .ApplyStyleLastColumn = False
        .ApplyStyleRowBands = True
        .ApplyStyleColumnBands = False
    End With
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, Прошу прощения. Имела ввиду ту самую точку, о которой Вы говорили (
Цитата
The_Prist написал:
Правильно будет поставить перед ActiveDocument точку, чтобы явно указать его принадлежность объекту Word
Ваш код работает, спасибо!
Но в случае, если перед таблицей нужны еще какие-то строки текста, то таблицей это все затирается, если я верно понимаю. Можно этого как-то избежать? Для этого наверно и существует Selection.
Код
Sub Макрос4()
Dim oWord As Word.Application
Dim oDoc As Word.Document
Set oWord = CreateObject("Word.Application")
Set oDoc = oWord.Documents.Add()
oWord.Visible = True
oDoc.Activate
With oWord
    .Selection.Font.Bold = wdToggle
    .Selection.TypeText Text:="УТВЕРЖДАЮ"
     .Selection.TypeParagraph
    .Selection.Font.Bold = wdToggle
    oDoc.Tables.Add Range:=oDoc.Range, NumRows:=16, NumColumns _
        :=2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
        wdAutoFitWindow
    With oDoc.Tables(1)
        If .Style <> "Сетка таблицы" Then
            .Style = "Сетка таблицы"
        End If
        .ApplyStyleHeadingRows = True
        .ApplyStyleLastRow = False
        .ApplyStyleFirstColumn = True
        .ApplyStyleLastColumn = False
        .ApplyStyleRowBands = True
        .ApplyStyleColumnBands = False
    End With
    End With
End Sub
 
The_Prist, Все, разобралась. Мой вопрос содержал ответ :) Спасибо большое за помощь!!
Страницы: 1
Читают тему
Наверх