Word VBA Создать график на каждой странице - PullRequest
1 голос
/ 14 октября 2019

Я работаю в школьном округе. Нам нужны письма, чтобы выйти к родителям с отсутствием их учеников. Данные уже используются из документа Excel для создания слияния. Из документа Excel я перетаскиваю 3 поля в «скрытую таблицу»: имя студента, медианное отсутствие и отсутствие студента. Скрытая таблица - это просто таблица без полей с белым текстом на каждой странице. (белый, чтобы не печатать) Таблица используется для генерации диаграммы с использованием следующего кода;

Dim tblOne As Table
Dim cht As Chart
Dim chtWkSht As Excel.Worksheet
Dim X As Integer
Dim RowCount As Integer
Dim ColumnCount As Integer
Dim LastColumn As String



For Each tblOne In ActiveDocument.Tables
    tblOne.Range.Copy
   'Create Chart
    Set cht = ActiveDocument.InlineShapes.AddChart.Chart


    Set chtWkSht = cht.ChartData.Workbook.Worksheets(1)   
'Set table size
    RowCount = tblOne.Rows.Count
    ColumnCount = tblOne.Columns.Count
'Determine Spreadsheet column letter for lastColumnTable
    If ColumnCount < 26 Then
        LastColumn = Chr(62 + ColumnCount)
    Else
     LastColumn = Chr(Int(ColumnCount / 26) + 64) & Chr((ColumnCount Mod 26) + 64)
   End If
 'Resize chart data area to table size and paste table data
    With chtWkSht
        .ListObjects("Table1").DataBodyRange.Delete
        .ListObjects("Table1").Resize chtWkSht.Range("A1:" & LastColumn & RowCount)
        .Range("A1:" & LastColumn & RowCount).Select
       .Paste
    End With

    cht.ChartData.Workbook.Close
Next

Это генерирует диаграмму для каждого учащегося, но генерирует все диаграммы на первой странице. Мне нужно, чтобы графики появлялись на странице, соответствующей каждому студенту. Я довольно новичок в VBA. Я не уверен, что лучший способ сделать это - создать диаграмму в таблице, возможно, используя закладку?

Или обновить существующую диаграмму на каждой странице, указав данные в «скрытой таблице».

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

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

Спасибо

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Форматирование «скрытых таблиц» в виде белого текста Word - не лучший вариант. Это не только усложняет редактирование документа, но и не скрывает таблицу, так как Word будет по-прежнему инструктировать принтер, чтобы распечатать его, что приведет к появлению пустой области и, возможно, печати дополнительных страниц. Лучшим вариантом является изменение свойств шрифта на скрытый. Это облегчит редактирование, поскольку текст можно будет просматривать на экране и исключить таблицу из инструкций принтера.

Диаграммы появляются на первой странице, потому что вы не указали Word, где вы хотите разместить диаграмму. В результате Word просто вставляет диаграммы в начале документа.

Вам нужно будет оценить свой документ, чтобы найти подходящее место для размещения диаграммы. Если каждая буква содержит таблицу с данными для диаграммы, вы можете расположить диаграмму относительно нее, в идеале - пустой абзац непосредственно перед таблицей или сразу после нее.

For Each tblOne In ActiveDocument.Tables
    tblOne.Range.Copy
    'get chart location
    Dim chtRange as Range
    set chtRange = tblOne.Range
    'to place chart before table
    chtRange.Collapse wdCollapseStart
    chtRange.Move wdParagraph, -1
    'to place chart after table
    'chtRange.Collapse wdCollapseEnd
    'chtRange.Move wdParagraph, 1
    'Create Chart
    Set cht = ActiveDocument.InlineShapes.AddChart2(Range:=chtRange).Chart

Редактировать: теперь, когда у меня былошанс проверить это на моем ПК. Я изменил последнюю строку и могу подтвердить, что код работает. Поскольку я использую Office 365, я использовал метод AddChart2. Устаревший метод AddChart работает так же.

0 голосов
/ 14 октября 2019

В Word нет объектов для страниц, их отображение генерируется на лету. Чтобы создать новую страницу, вставьте разрыв страницы в конце каждой вставки диаграммы:

Selection.InsertBreak Type:=wdPageBreak
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...