2012-07-17 32 views
5

Slide.Shapes.AddChart()自动打开Excel。即使我很快做Chart.ChartData.Workbook.Application.Visible = false,它仍然显示一段时间。这使得自动化的图表创建容易出错,因为用户不得不尝试不断弹出的Excel应用程序。有没有办法让PowerPoint在创建图表时不要打开Excel?

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

回答

8

此行为是“通过设计”,并且微软不想更改。这是UI的功能。

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

检查从 MSDN

+0

我没有测试过这个,但这与Slide.AddChart有什么不同?这不会自动打开Excel工作簿吗? – simendsjo 2012-07-23 08:45:45

+0

@simendsjo代码还具有创建图表所需的数据。所以它可能不会弹出excel。 我无法尝试上面的代码,因为我很少使用Windows。 – 465544 2012-07-23 15:54:09

+0

这正是我正在做的(Shapes.AddChart),所以即使从代码 – simendsjo 2012-07-24 07:54:59

1

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

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

然后,您将操纵通过s.OLEFormat.Object添加的图表。我只尝试了一点,但它并没有打开一个外部Excel应用程序,除非我激活该对象,否则我没有看到任何极端的闪烁。换一种说法是,至少在Powerpoint 2010中,您需要将其转换为使用所有功能。如果这不工作,你总是可以尝试web components.

编辑: 我不明白为什么这种方法会导致一个问题,而是要尽力协助进一步这里是一个多一点的代码,显示实际操纵的对象。这是用对象而不是工作簿等书写的,所以不需要引用任何参考。它只要求用户在他们的机器上安装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 
+0

我要为出现在PowerPoint中的图表太数据。看来我必须嵌入或链接一个Excel工作簿才能使用它,这可能对我的使用情况更糟糕。 – simendsjo 2012-07-18 08:21:08

+0

数据位于Excel.Chart对象的Sheet1中,您可以通过代码修改该对象。看到我编辑的答案。 – 2012-07-18 12:54:41

+0

谢谢,但这仍然只是“有效”。该图是作为图片添加的,而不是实际的图表。 PowerPoint无法操作通过PowerPoint添加的图表。添加图表模板后,您无法应用它(或者您可以,它只是没有做任何事情)。它不会添加到图表占位符等等等等等等...... – simendsjo 2012-07-18 18:11:37

0

这个环节我会建议其他methdology超过过来一样。

  1. 在PowerPoint中VBA添加refrences为“Microsoft Excel中12.0对象库”

  2. 确保用户是为Excel的这种操作没有必须通过手术前yuser形式弹出打开。

  3. 在VBA创建Excel并设定其参数在下面的代码

  4. 添加PowerPoint演示图表,用户不会是能够在添加图看,底层excel工作表的开口excet 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 
相关问题