Используйте Word Content Control Values ​​для объекта диаграммы в том же документе Word - PullRequest
0 голосов
/ 16 апреля 2020

Используя MS Word (в моем случае версия 2010), я создал форму с элементами управления контентом, которую должен заполнить пользователь. Теперь я хочу, чтобы некоторые записи (которые я уже дал названия) были показаны на диаграмме в том же документе Word (не в отдельном документе Excel).

Это должен быть автоматизированный процесс, так что если пользователь изменяет одну из записей Content Control, диаграмма автоматически обновляется; Я также был бы в порядке, если бы пользователю приходилось нажимать кнопку, чтобы обновить график (но пользователю не нужно было много нажимать, поскольку я должен предположить, что у пользователя мало навыков).

Поэтому я вставил объект диаграммы Excel в документ Word. Я также написал некоторый код VBA внутри этого объекта Excel, чтобы считать значения Контент-контроля из документа Word в качестве источника для диаграммы. Но я думаю, что мне действительно нужно, чтобы код VBA был в самом документе Word (например, должен выполняться при нажатии пользователем кнопки), но я не знаю, как обращаться с объектом диаграммы Excel и ячейками. в.

Мой VBA-код внутри объекта Excel:

Sub ChartDataAcquirer()

Dim wdApp As Object
Dim wdDoc As Object
Dim DocName As String
Dim ccX As String
Dim ccY As String
Dim datapairs As Integer

'''''''''' Variables '''''''''
DocName = "wordform.docm"
ccX = "titleX"
ccY = "titleY"
datapairs = 5
''''''''''''''''''''''''''''''

Set wdApp = GetObject(, "Word.Application")
Set wdDoc = wdApp.Documents(DocName)

Dim i As Integer
For i = 1 To datapairs

    With ActiveSheet.Cells(i + 1, 1) ' The first row contains headline, therefore i+1
    .Value = wdDoc.SelectContentControlsByTitle(ccX & i).Item(1).Range.Text    ' The CC objects containing the x values have titles "titleX1", "titleX2" ..., therefore "ccX & i"
    On Error Resume Next
    .Value = CSng(wdDoc.SelectContentControlsByTitle(ccX & i).Item(1).Range.Text) ' To transform text into numbers, if user filled the CC object with numbers (which he should do)
    End With

    With ActiveSheet.Cells(i + 1, 2)
    .Value = wdDoc.SelectContentControlsByTitle(ccY & i).Item(1).Range.Text
    On Error Resume Next
    .Value = CSng(wdDoc.SelectContentControlsByTitle(ccY & i).Item(1).Range.Text)
    End With

Next

End Sub

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

1 Ответ

0 голосов
/ 30 апреля 2020

Ниже приведен демонстрационный код, который показывает, как получить доступ к встроенной диаграмме Excel.

Обратите внимание, что имя (Shapes([indexValue])) вашей диаграммы Shape, вероятно, отличается от этого кода. Вам нужно будет проверить и изменить это назначение. Кроме того, ваша диаграмма может быть InlineShape, а не Shape, поэтому вам также может потребоваться отрегулировать этот бит.

Этот код проверяет, действительно ли Shape является диаграммой. Если это так, к объекту Chart обращаются так же, как к его листу данных. Благодаря этому можно получить фактическую рабочую книгу, рабочие таблицы, даже приложение Excel, если вам это нужно.

Sub EditChartData()
    Dim doc As Word.Document
    Dim shp As Word.Shape
    Dim cht As Word.Chart
    Dim wb As Excel.Workbook, ws As Excel.Worksheet, xlApp As Excel.Application

    Set doc = ActiveDocument
    Set shp = doc.Shapes("MyChart")
    If shp.HasChart Then
        Set cht = shp.Chart
        cht.ChartData.Activate
        Set wb = cht.ChartData.Workbook
        Set xlApp = wb.Application
        Set ws = wb.ActiveSheet
        Debug.Print ws.Cells(1, 2).Value2
    End If
    Set ws = Nothing
    Set wb = Nothing
    Set cht = Nothing
    Set xlApp = Nothing
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...