Используя 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 и работает с ним, но именно здесь Я застрял ...