【发布时间】:2020-04-16 08:44:55
【问题描述】:
使用 MS Word(在我的例子中是 2010 版),我构建了一个包含内容控制元素的表单,供用户填写。现在,我希望将某些条目(我已经给出标题)显示在同一个 Word 文档(而不是单独的 Excel 文档)内的图表中。
这应该是一个自动化的过程,因此如果用户更改了内容控制条目之一,图表会自动更新;如果用户必须按下一个按钮来更新图表,我也可以(但用户不应该经常点击,因为我必须假设用户没有什么技能。)
所以我在我的 Word 表单文档中插入了一个 Excel 图表对象。我还在这个 Excel 对象中编写了一些 VBA 代码,以从 Word 文档中读取内容控件值作为图表的源。但我认为我真正需要的是在我的 Word 文档本身中的 VBA 代码(例如在用户单击按钮时执行),但我不知道如何处理 Excel 图表对象和单元格内。
我在 Excel 对象中的 VBA 代码是:
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 表单文档本身中并在其中运行,但这就是我卡住的地方......
【问题讨论】:
-
看看stackoverflow.com/questions/61062138/…。您可能需要处理 Shape 对象和 InlineShape 对象中的图表。
标签: excel vba charts ms-word contentcontrol