有没有办法告诉PowerPoint不要在创build图表时打开Excel?

Slide.Shapes.AddChart()自动打开Excel。 即使我很快做Chart.ChartData.Workbook.Application.Visible = false ,它仍然显示一会儿。 这使得自动化的图表创build容易出错,因为用户不得不尝试不断popup的Excel应用程序。

使用WithWindow = false打开演示文稿将在创build新图表时仍然打开Excel。

这种行为是“通过devise”,而微软对改变不感兴趣。 这是UI的function。

你可以做的是在Excel中创build图表(使用interop或OpenXML),然后将该文件导入(插入)到PowerPoint中。

从MSDN检查这个链接

这是一个可能的解决方法。

 Sub ChartExample() Dim s As Shape Set s = Application.Presentations(1).Slides(1).Shapes.AddOLEObject(ClassName:="Excel.Chart") End Sub 

然后,您将操纵通过s.OLEFormat.Object添加的图表。 我只尝试了一点,但它并没有打开一个外部Excel应用程序,我没有看到任何极端的闪烁,除非我激活的对象。 至less在Powerpoint 2010中,您需要将其转换为使用所有function。 如果这不起作用,您可以随时尝试Web组件。

编辑:我不明白为什么这个方法导致一个问题,但试图进一步协助这里是多一点的代码,显示实际操纵对象。 这是用对象而不是工作簿等写的,所以不需要引用。 它只要求用户在他们的机器上有Excel。

 Option Explicit Const xlcolumns = 2 Sub ChartExample() Dim s As Shape Dim wb As Object, chart As Object, data As Object Set s = Application.Presentations(1).Slides(1).Shapes.AddOLEObject(ClassName:="Excel.Chart") Set wb = s.OLEFormat.Object Set chart = wb.Sheets(1) Set data = wb.Sheets(2) 'Set the range for the chart data chart.setsourcedata Source:=data.Range("A1:C7"), PlotBy:= _ xlcolumns 'Update data values for the chart data.Range("B1").Value = "Column Label 1" data.Range("C1").Value = "Column Label 2" data.Range("A2:C7").clearcontents data.Range("A2").Value = "Row Label" data.Range("B2").Value = 7 data.Range("C2").Value = 11 End Sub 

我会build议另一种方法来完成。

  1. 在Powerpoint VBA中添加“Microsoft Excel 12.0 Object Library”

  2. 确保用户对于这个操作,在操作之前,没有一个excel必须通过yuser表单popup。

  3. 在VBA中创build一个excel,并在下面的代码中设置其参数

  4. 添加幻灯片图表,用户将无法看到添加图表excel表格可以通过代码控制excel表格的底层开放。

示例代码:

 Option Explicit Sub AddExcelChartSample() Dim xlApp As Excel.Application, xlWkbk As Excel.Workbook Dim pres As PowerPoint.Presentation, sld As PowerPoint.Slide, iCount As Integer, chtShape As PowerPoint.Shape 'Open up the excel instance and set parameters Set xlApp = New Excel.Application With xlApp .WindowState = xlNormal .Top = -1000 .Left = -1000 .Height = 0 .Width = 0 End With Set sld = PowerPoint.ActiveWindow.View.Slide For iCount = 1 To 10 Set chtShape = sld.Shapes.AddChart(xlLine) Set xlWkbk = chtShape.Chart.ChartData.Workbook With xlWkbk .Sheets(1).Range("A2").Value = "Test 1" .Sheets(1).Range("A3").Value = "Test 2" .Sheets(1).Range("A4").Value = "Test 3" End With chtShape.Chart.Refresh xlWkbk.Close False Next iCount xlApp.Quit End Sub