Нарисовать таблицу из Excel в закладку Word - PullRequest
0 голосов
/ 06 мая 2020

Таблица вставляется из Excel в Word. Таблица заполняется строками и столбцами. Vba открывает мой файл в Word .draw и заполняет таблицу в моем текстовом документе. Основная проблема, с которой я столкнулся, заключается в том, что, несмотря на то, что я вставил закладку в свой документ Word, таблица не вставляется на месте закладки. Мои коды следующие: -

Sub CreateTableInWord()

    Dim objWord As Object, objDoc As Object, objTbl As Object, objRow As Object
    Dim objCol As Object, colSets As Long, numMonths As Long, i As Long, n As Long, c As Long
    Dim amt, dtStart, tblRows As Long, tblCols As Long, rw As Long, col As Long

    numMonths = Range("A1").Value
    amt = Range("B1").Value
    dtStart = Range("C1").Value
    colSets = Range("D1").Value 'how many sets of columns ?

    tblRows = 1 + Application.Ceiling(numMonths / colSets, 1) 'how many table rows?
    tblCols = colSets * 3                                     'how many table cols?

    Set objWord = CreateObject("Word.Application")
    objWord.Visible = True
    'Set objDoc = objWord.Documents.Add
     Set objDoc = objWord.Documents.Open("C:\Users\rakesh\Desktop\mailmerge\lease2.docx")

    Dim oRange As Object
    Set oRange = objDoc.Bookmarks("RS").Range

    Set objTbl = objDoc.Tables.Add(Range:=objDoc.Paragraphs(1).Range, _
                 NumRows:=tblRows, NumColumns:=tblCols)

    c = 0
    For n = 1 To colSets
        objTbl.Cell(1, c + 1).Range.Text = "Instal No"
        objTbl.Cell(1, c + 1).Range.Bold = True
        objTbl.Cell(1, c + 2).Range.Text = "Amt(Rs)"
        objTbl.Cell(1, c + 2).Range.Bold = True
        objTbl.Cell(1, c + 3).Range.Text = "Due Date"
        objTbl.Cell(1, c + 3).Range.Bold = True
        c = c + 3
    Next n
    objTbl.Range.ParagraphFormat.Alignment = 1 ' wdAlignParagraphCenter

    rw = 2
    col = 0
    For i = 1 To numMonths

        'rw = 1 + Application.Ceiling(i / colSets, 1)  'fill across and then down
        rw = IIf(i Mod (tblRows - 1) = 1, 2, rw + 1)   'fill down then across

        objTbl.Cell(rw, col + 1).Range.Text = i
        objTbl.Cell(rw, col + 2).Range.Text = amt
        objTbl.Cell(rw, col + 3).Range.Text = Format(DateAdd("m", i - 1, dtStart), "dd/mm/yyyy")



        'col = IIf(i Mod colSets = 0, 0, col + 3)         'fill across and then down
        col = IIf(i Mod (tblRows - 1) = 0, col + 3, col) 'fill down and then across

    Next i

End Sub

Ответы [ 3 ]

1 голос
/ 07 мая 2020

«как автоматически подобрать ширину столбца таблицы, я пробовал objTbl.Range.EntireColumn.AutoFit, я не работает»

Word - это не Excel! В Word нет такого свойства таблицы, как CompleteColumn. Вам действительно стоит потратить некоторое время на изучение свойств и методов Word. Попробуйте:

With objDoc
  Set objTbl = .Tables.Add(Range:=.Bookmarks("RS").Range, _
    NumRows:=tblRows, NumColumns:=tblCols, _
    DefaultTableBehavior:=wdWord9TableBehavior, _
    AutofitBehaviour:=wdAutoFitContent)
End With

или:

objTbl.Columns.AutoFit
1 голос
/ 06 мая 2020

Необходимо использовать oRange при добавлении таблицы:

Dim oRange As Object
Set oRange = objDoc.Bookmarks("RS").Range

Set objTbl = objDoc.Tables.Add(Range:=oRange , _
             NumRows:=tblRows, NumColumns:=tblCols)
0 голосов
/ 07 мая 2020

Вам даже не нужен oRange, не говоря уже об использовании его при добавлении таблицы:

With objDoc
  Set objTbl = .Tables.Add(Range:=.Bookmarks("RS").Range, _
    NumRows:=tblRows, NumColumns:=tblCols)
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...