Vba:通过Excel.Application在Word中编辑图表

我有一个简单的问题:我想编辑一个Word文档中的所有图表。 更确切地说,我想在所有图表中执行search和replace(他们的数据更加精确)。 现在我的做法是做这样的事情:

Dim appExcel as Excel.Application Dim wb as Excel.Workbook Dim ws as Excel.Worksheet Dim shp as InlineShape Dim cht as Word.Chart For each shp in ActiveDocument.InlineShapes If shp.HasChart then set cht = shp.Chart 'Here comes the Question: how to assign the chartdata.workbook to wb? end if next shp 

有人有想法吗? 我会很感激! 谢谢 :)

要回答您在代码中input的问题,请使用Set wb = cht.chartdata.workbook

要回答文中隐含的问题 – “search和replace数据” – 您可以通过对象模型访问底层的图表数据。 如果您需要做任何resize的关键是数据在ListObject (Excel表)中。 这里有一些示例代码可以深入到数据中的单元格:

 Set ils = ActiveDocument.InlineShapes(index) Set c = ils.Chart Set wb = c.ChartData.Workbook Set ws = wb.Worksheets(1) Set lo = ws.ListObjects(1) lo.Resize wb.Application.Range("A1:D7") ws.Cells(6, 1).value = "New category" ws.Cells(6, 2).value = 6.8 

@CindyMeister:嘿,这是另一个帐户的原始海报。 感谢您的回答! 不过,我已经尝试了你的方法,它似乎并没有为我的办公室安装工作,也没有任何其他我已经尝试过(我在自己的Win10电脑上使用Office 2013,我试图在机器上运行的代码在win7 / win10上运行Office 2010/2013)。 每当您尝试在同一个图表上运行多次提供的代码时,都会出现问题。 然后会发生下面的运行时错误(可能不是德语的完全正确的翻译):对象'chartdata'的方法'工作簿'失败了运行时错误-2147467259(80004005)。 正如我所说,这个问题只出现在第一次运行后。 所以你的代码运行,但只有一次! 这就是说,我发现了一个似乎很容易的解决scheme,在我的机器上工作甚至运行得更快。 这里是:

 Dim strA As String: strA = "Search" Dim strb As String: strb = "Replace" Dim cht As Word.Chart Dim doc As Word.Document Dim ils As Word.InlineShape Set doc = ActiveDocument Set ils = doc.InlineShapes(1) Set cht = ils.Chart If cht.ChartData.Workbook.Sheets(1).Cells(1, 2) = strA Then cht.ChartData.Workbook.Sheets(1).Cells.Replace What:=strA, Replacement:=strb, LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False Else cht.ChartData.Workbook.Sheets(1).Cells.Replace What:=strb, Replacement:=strA, LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False End If cht.ChartData.Workbook.Close cht.Refresh Set cht = Nothing Set ils = Nothing 

所以只要你不把chartdata.workbook分配给一个Excel.Workbookvariables,而是直接使用chartdata.workbook,你就可以。 这在所有运行Office 2013和win10或win7的多台机器上进行了testing。 它不适用于Office 2010或更快。 我没有机会在运行Office 2016的机器上testing它,但不幸的是。

你能做些什么吗?

你首先需要激活Word图表对象,这应该工作

  Dim oWordChartAsInlineShape As InlineShape Set oWordChartAsInlineShape = oDocument.InlineShapes(1) Dim oWordChart As Word.Chart Set oWordChart = oWordChartAsInlineShape.Chart oWordChart.ChartData.Activate Dim oChartWorkbook As Excel.Workbook Set oChartWorkbook = oWordChart.ChartData.Workbook Debug.Print oWordChart.ChartData.Workbook.Sheets(1).Cells(1, 1)